未找到方法:'System.String System.String.Format(System.IFormatProvider, System.String, System.Object)
Method not found: 'System.String System.String.Format(System.IFormatProvider, System.String, System.Object)
我有一个带有帮助页面的 Web API 2 项目,该项目在本地运行良好,但在将其推送到 Azure 时抛出此错误:
Method not found: 'System.String System.String.Format
(System.IFormatProvider, System.String, System.Object)
我暂时关闭了自定义错误以便可以看到完整的堆栈跟踪here
错误源于这行代码:
string selectExpression = String.Format(CultureInfo.InvariantCulture, MethodExpression, GetMemberName(reflectedActionDescriptor.MethodInfo));
参见第 96 行 here
完整的源代码可在 GitHub
我什至不确定该把它带到哪里去。
根据 its MSDN page,您使用的重载仅在 .NET 4.6 上受支持。
要么将主机配置为运行.NET 4.6,要么将项目的目标框架更改为4.5并重新编译。
在 4.5 中有一个 params object[]
overload 然后将被选中,而无需更改您的代码。
这没有意义。自 2009 年以来,我们的应用程序中就有这样一行代码
String.Format(CultureInfo.CurrentCulture, "You must specify a new password of {0} or more characters.", _membershipService.MinPasswordLength);
最近我们将项目升级到 .NET 4.6,现在,至少对我来说,这一行因同样的错误而中断。很明显,新的重载破坏了一些东西,而且方法也不是新的。
以防万一这对任何人都有帮助。我们最近将开发环境升级到VS2015后遇到了这个问题(我们的目标环境是.Net 4)
我们的 C++/clr 项目没有正确设置为使用 /clr 开关,即它们被设置为不支持通用语言,即使我们使用的是 clr。在我们升级到 VS2015 之前,这并没有引起问题。
我不太清楚为什么会这样。我猜 c++/clr 项目必须在编译时绑定到特定版本的 CLR 运行时。如果有人能更清楚地解释这一点,我会很感兴趣。
如果您既不能将主机升级到 4.6 也不能将项目降级到 4.5,则有一个解决方法:传递 "object[]" 作为参数而不是 "object"。因此,您将强制使用 "params object[]" 重载。示例:
return string.Format(formatProvider, "{0:" + format + "}", new object[] { value });
我们正在使用自定义构建服务器。即使项目 TargetFrameworkVersion 是 v4.5.1,当安装 .net 4.6.1 来构建服务器并将单个参数作为格式参数传递时,编译器更喜欢使用此重载
public static string Format(IFormatProvider provider, string format, object arg0)
而不是
public static string Format(IFormatProvider provider, string format, params object[] args)
唯一的解决方案是创建和传递数组参数
示例:
string.Format(CultureInfo.CurrentCulture, "Hello {0}", new[] { name });
Azure Data Lake Analytics 目前在 .NET 4.5 上运行。所以我们不支持 .NET 4.6 程序集场景,这种错误是可能的。
为避免这种情况,您应该在 .NET 4.5 中重建您的程序集。
以下 "non-recommended" 解决方法可能适用于 .NET 4.6 程序集:重写
string.Format(provider, format, arg0, arg1)
进入
string.Format(provider, format, new object[] { arg0, arg1 })
我有一个带有帮助页面的 Web API 2 项目,该项目在本地运行良好,但在将其推送到 Azure 时抛出此错误:
Method not found: 'System.String System.String.Format (System.IFormatProvider, System.String, System.Object)
我暂时关闭了自定义错误以便可以看到完整的堆栈跟踪here
错误源于这行代码:
string selectExpression = String.Format(CultureInfo.InvariantCulture, MethodExpression, GetMemberName(reflectedActionDescriptor.MethodInfo));
参见第 96 行 here
完整的源代码可在 GitHub
我什至不确定该把它带到哪里去。
根据 its MSDN page,您使用的重载仅在 .NET 4.6 上受支持。
要么将主机配置为运行.NET 4.6,要么将项目的目标框架更改为4.5并重新编译。
在 4.5 中有一个 params object[]
overload 然后将被选中,而无需更改您的代码。
这没有意义。自 2009 年以来,我们的应用程序中就有这样一行代码
String.Format(CultureInfo.CurrentCulture, "You must specify a new password of {0} or more characters.", _membershipService.MinPasswordLength);
最近我们将项目升级到 .NET 4.6,现在,至少对我来说,这一行因同样的错误而中断。很明显,新的重载破坏了一些东西,而且方法也不是新的。
以防万一这对任何人都有帮助。我们最近将开发环境升级到VS2015后遇到了这个问题(我们的目标环境是.Net 4)
我们的 C++/clr 项目没有正确设置为使用 /clr 开关,即它们被设置为不支持通用语言,即使我们使用的是 clr。在我们升级到 VS2015 之前,这并没有引起问题。
我不太清楚为什么会这样。我猜 c++/clr 项目必须在编译时绑定到特定版本的 CLR 运行时。如果有人能更清楚地解释这一点,我会很感兴趣。
如果您既不能将主机升级到 4.6 也不能将项目降级到 4.5,则有一个解决方法:传递 "object[]" 作为参数而不是 "object"。因此,您将强制使用 "params object[]" 重载。示例:
return string.Format(formatProvider, "{0:" + format + "}", new object[] { value });
我们正在使用自定义构建服务器。即使项目 TargetFrameworkVersion 是 v4.5.1,当安装 .net 4.6.1 来构建服务器并将单个参数作为格式参数传递时,编译器更喜欢使用此重载
public static string Format(IFormatProvider provider, string format, object arg0)
而不是
public static string Format(IFormatProvider provider, string format, params object[] args)
唯一的解决方案是创建和传递数组参数
示例:
string.Format(CultureInfo.CurrentCulture, "Hello {0}", new[] { name });
Azure Data Lake Analytics 目前在 .NET 4.5 上运行。所以我们不支持 .NET 4.6 程序集场景,这种错误是可能的。 为避免这种情况,您应该在 .NET 4.5 中重建您的程序集。
以下 "non-recommended" 解决方法可能适用于 .NET 4.6 程序集:重写
string.Format(provider, format, arg0, arg1)
进入
string.Format(provider, format, new object[] { arg0, arg1 })