方法未找到:'字符串System.String.Format(系统.IFormatProvider、系统.字符串

本文关键字:字符串 系统 String System Format IFormatProvider 方法 | 更新日期: 2023-09-27 17:52:11

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

方法未找到:'System. '字符串System.String.Format(系统。IFormatProvider、系统。字符串,System.Object)

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

错误源自这行代码:

string selectExpression = string . format (CultureInfo. format)InvariantCulture, methoexpression, GetMemberName(reflectedActionDescriptor.MethodInfo));

见第96行

完整的源代码在GitHub

我甚至不知道该怎么处理这个

方法未找到:'字符串System.String.Format(系统.IFormatProvider、系统.字符串

根据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 })