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

mgP*_*ePe 5 c# asp.net iis

我有两台服务器,但运行的设置大致相同 - IIS、SQL Server 等。一台服务器给我这个错误,另一台则没有。我将相同的代码从 Visual Studio 发布到两者。

他们都在跑步.NET CLR Version v4.0.30319,我相信是这样4.5

有些答案说你必须瞄准另一个版本,如果我在 Visual Studio 中更改它,一切都会崩溃,所以事实并非如此。此外,相同的代码在其他服务器上运行。

其他答案说一些旧的 DLL 可能是原因。我没有部署到工作服务器,所以也许复制了一些较新的 DLL?但我怎么知道呢?

另外,错误似乎不在我的代码中,而是在框架和 Umbraco 中,所以我认为我不应该进入并更新字符串函数或类似的东西:

[MissingMethodException: Method not found: 'System.String System.String.Format(System.IFormatProvider, System.String, System.Object)'.]
   System.Net.Http.Headers.MediaTypeHeaderValue.CheckMediaTypeFormat(String mediaType, String parameterName) +0
   System.Net.Http.Headers.MediaTypeHeaderValue..ctor(String mediaType) +33
   System.Net.Http.Formatting.MediaTypeConstants..cctor() +45

[TypeInitializationException: The type initializer for 'System.Net.Http.Formatting.MediaTypeConstants' threw an exception.]
   System.Net.Http.Formatting.JsonMediaTypeFormatter..ctor() +99
   System.Net.Http.Formatting.MediaTypeFormatterCollection.CreateDefaultFormatters() +49
   System.Web.Http.HttpConfiguration..ctor(HttpRouteCollection routes) +255
   System.Web.Http.GlobalConfiguration.<CreateConfiguration>b__0() +78
   System.Lazy`1.CreateValue() +14308960
   System.Lazy`1.LazyInitValue() +524
   Umbraco.Web.WebBootManager.InitializeResolvers() +1530
   Umbraco.Core.CoreBootManager.Initialize() +814
   Umbraco.Web.WebBootManager.Initialize() +19
   Umbraco.Core.UmbracoApplicationBase.StartApplication(Object sender, EventArgs e) +244

[HttpException (0x80004005): The type initializer for 'System.Net.Http.Formatting.MediaTypeConstants' threw an exception.]
   System.Web.HttpApplicationFactory.EnsureAppStartCalledForIntegratedMode(HttpContext context, HttpApplication app) +588
   System.Web.HttpApplication.RegisterEventSubscriptionsWithIIS(IntPtr appContext, HttpContext context, MethodInfo[] handlers) +181
   System.Web.HttpApplication.InitSpecial(HttpApplicationState state, MethodInfo[] handlers, IntPtr appContext, HttpContext context) +322
   System.Web.HttpApplicationFactory.GetSpecialApplicationInstance(IntPtr appContext, HttpContext context) +402
   System.Web.Hosting.PipelineRuntime.InitializeApplication(IntPtr appContext) +452

[HttpException (0x80004005): The type initializer for 'System.Net.Http.Formatting.MediaTypeConstants' threw an exception.]
   System.Web.HttpRuntime.FirstRequestInit(HttpContext context) +646
   System.Web.HttpRuntime.EnsureFirstRequestInit(HttpContext context) +159
   System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest wr, HttpContext context) +778
Run Code Online (Sandbox Code Playgroud)

一般来说,谷歌上没有太多信息,所以不确定可以做什么。欢迎任何见解!

Ris*_*o M 3

如果您查看文档,该重载似乎仅在 .NET 4.6 上可用。服务器可能具有不同的 .NET Framework 版本。

.NET 4.5 上最接近的重载:

Format(IFormatProvider, String, Object[])
Run Code Online (Sandbox Code Playgroud)

在 .NET 4.6 上有完全相同的重载:

Format(IFormatProvider, String, Object)
Run Code Online (Sandbox Code Playgroud)

确保两台服务器均已正确安装 .NET 4.6。

  • @pep 正确 - 它说两者都是 4.0,但是当按照 @Risto M 的建议深入到“v4\Full”时,结果发现一个安装了 4.5,另一个安装了 4.6。我只是不知道如何正确检查 (2认同)