C# 未找到方法:';System.String System.String.Format(System.IFormatProvider、System.String、System.Object)

C# 未找到方法:';System.String System.String.Format(System.IFormatProvider、System.String、System.Object),c#,asp.net,azure,asp.net-web-api2,C#,Asp.net,Azure,Asp.net Web Api2,我有一个Web API 2项目,其帮助页面在本地运行良好,但当我将其推送到Azure时会抛出此错误: 找不到方法:“System.String System.String.Format” (System.IFormatProvider、System.String、System.Object) 我暂时关闭了自定义错误,以便可以看到完整的堆栈跟踪 错误源于这一行代码: string selectExpression=string.Format(CultureInfo.InvariantCulture

我有一个Web API 2项目,其帮助页面在本地运行良好,但当我将其推送到Azure时会抛出此错误:

找不到方法:“System.String System.String.Format” (System.IFormatProvider、System.String、System.Object)

我暂时关闭了自定义错误,以便可以看到完整的堆栈跟踪

错误源于这一行代码:

string selectExpression=string.Format(CultureInfo.InvariantCulture,MethodExpression,GetMemberName(reflectedActionDescriptor.MethodInfo))

见第96行

完整的源代码可在

我甚至不知道该如何处理这个问题。

根据,您使用的重载仅在.NET 4.6上受支持

将主机配置为运行.NET4.6,或者将项目的目标框架更改为4.5并重新编译


在4.5中,有一个选项将被选择,而无需修改代码。

这没有意义。自2009年以来,我们的应用程序中就有这样一行代码

String.Format(CultureInfo.CurrentCulture,“您必须指定一个{0}或更多字符的新密码。”,\u membershipService.MinPasswordLength)


最近我们将项目升级到了.NET4.6,现在,至少对我来说,这一行出现了相同的错误。因此,很明显,新的重载正在破坏某些东西,而该方法并不是新的。

以防这对任何人都有帮助。在将开发环境升级到VS2015(我们的目标环境是.Net 4)之后,我们最近遇到了这个问题

我们的C++/clr项目没有正确地设置为使用/clr开关,即它们被设置为不支持公共语言,即使我们正在使用clr。直到我们升级到VS2015,这才导致问题


我不完全清楚为什么会这样。我猜c++/clr项目必须在编译时绑定到clr运行时的特定版本。如果有人能更清楚地解释这一点,我很感兴趣。

如果您既不能将主机升级到4.6,也不能将project降级到4.5,那么有一个解决方法:将“object[]”作为args而不是“object”传递。因此,您将强制使用“params object[]”重载。例如:

return string.Format(formatProvider, "{0:" + format + "}", new object[] { value });

我们正在使用自定义构建服务器。即使project 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}”,新[]{name})

Azure Data Lake Analytics今天在.NET 4.5上运行。因此,我们不支持.NET4.6程序集场景,并且这种错误是可能的。 为了避免这种情况,您应该在.NET 4.5中重建程序集

以下“非推荐”解决方案可能适用于.NET 4.6程序集:重写
string.Format(提供程序、格式、arg0、arg1)
进入
string.Format(provider,Format,new object[]{arg0,arg1})

请发布包含违规行的代码段,而不是指向github repo的链接。。您的Azure平台运行的是什么框架?@dalalleshouse您可能希望通过在
环境中检查版本来确保您运行的平台版本是您期望的版本。版本
(或类似于此:)。对于您观察到的情况,最合乎逻辑的解释是,您没有运行CLR 4.5或更高版本。哦,在这一点上,它在顶部显示“.NET Framework 4.6和4.5”,但在底部显示“在:4.6中受支持”。在运行4.6的机器上进行测试。那么,过载仅在4.6中支持,还是在4.5中也支持?我的项目以.NET4.5.2为目标,但我从一台应该安装了.NET4.5.2的机器上得到了这个错误。不应该被识别为
params对象[]