我有一个Web API 2项目,其帮助页面在本地运行良好,但当我将其推送到Azure时抛出此错误:
方法未找到:'System. '字符串System.String.Format(系统。IFormatProvider、系统。字符串,System.Object)
我暂时关闭了自定义错误,所以可以在这里看到完整的堆栈跟踪
错误源自这行代码:
string selectExpression = string . format (CultureInfo. format)InvariantCulture, methoexpression, GetMemberName(reflectedActionDescriptor.MethodInfo));
见第96行
完整的源代码在GitHub
我甚至不知道该怎么处理这个
根据MSDN页面,你正在使用的重载只支持。net 4.6。
要么配置主机运行。net 4.6,要么将项目的目标框架更改为4.5,然后重新编译。
在4.5中有一个params object[]
重载,它将被选择,而不必改变你的代码。
这没有意义。自2009年以来,我们的应用程序中就有这样的一行代码
String.Format(CultureInfo.CurrentCulture, "You must specify a new password of {0} or more characters.", _membershipService.MinPasswordLength);
最近我们将项目升级到。net 4.6,现在,至少对我来说,这一行出现了同样的错误。所以很明显新的重载破坏了一些东西,而方法不是新的
如果您既不能将主机升级到4.6也不能将项目降级到4.5,那么有一个解决方案:将"object[]"作为参数传递而不是"object"。所以你将强制使用"params object[]"重载。示例:
return string.Format(formatProvider, "{0:" + format + "}", new object[] { value });
如果这对任何人都有帮助。我们最近在将开发环境升级到VS2015后遇到了这个问题(我们的目标环境是。net 4)
我们的c++/clr项目没有正确设置为使用/clr开关,即它们被设置为没有公共语言支持,即使我们正在使用clr。在我们升级到VS2015之前,这并没有引起问题。
我不完全清楚为什么这会起作用。我猜c++/clr项目必须在编译时绑定到特定版本的clr运行时。如果有人能更清楚地解释一下,我很感兴趣。
我们正在使用自定义构建服务器。即使项目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中重新构建程序集。
以下"不推荐的"解决方法可能适用于。net 4.6程序集string.Format(provider, format, arg0, arg1)
成string.Format(provider, format, new object[] { arg0, arg1 })