找不到方法:'System.String System.String.Format(System.IFormatProvider,System.String,System.Object)

问题描述 投票:0回答:7

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

找不到方法:'System.String System.String.Format (系统.IFormatProvider、系统.字符串、系统.对象)

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

错误源自这行代码:

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

参见 96 号线这里

完整的源代码可在 GitHub

获取

我什至不知道该去哪里。

c# asp.net azure asp.net-web-api2
7个回答
30
投票

根据其 MSDN 页面,您使用的重载仅在 .NET 4.6 上受支持。

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

在 4.5 中,有一个

params object[]
重载,然后将选择它,而无需更改代码。


7
投票

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

String.Format(CultureInfo.CurrentCulture, "You must specify a new password of {0} or more characters.", _membershipService.MinPasswordLength);

最近我们将项目升级到.NET 4.6,现在,至少对我来说,这条线因同样的错误而中断。 很明显,新的重载正在破坏某些东西,并且该方法并不是新的。


7
投票

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

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

2
投票

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

我们的 C++/clr 项目尚未正确设置为使用 /clr 开关,即它们被设置为没有公共语言支持,即使我们正在使用 clr。在我们升级到 VS2015 之前,这并没有引起问题。

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


1
投票

我们正在使用自定义构建服务器。即使项目 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 });


1
投票

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


0
投票

以防万一其他人登陆这里,我听说有人使用

FluentEmail.Handlebars
nuget 包遇到了完全相同的错误。该人收到此错误的原因是因为他们还安装了
Handlebars.Net
软件包。是的,我知道你在想什么,真是个新手,对吧?我很高兴那不是我......

© www.soinside.com 2019 - 2024. All rights reserved.