找不到方法:'!! 0 [] System.Array.Empty()'


123

我使用VS 2015 RC和MVC模板创建了一个新应用,而没有修改任何代码行,我都遇到此错误:

Method not found: '!!0[] System.Array.Empty()'.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.MissingMethodException: Method not found: '!!0[] System.Array.Empty()'.

Source Error:

An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.

Stack Trace:


[MissingMethodException: Method not found: '!!0[] System.Array.Empty()'.]
   SAASApp.BundleConfig.RegisterBundles(BundleCollection bundles) in C:\Proyectos\SAASApp\SAASApp\App_Start\BundleConfig.cs:29
   SAASApp.MvcApplication.Application_Start() in C:\Proyectos\SAASApp\SAASApp\Global.asax.cs:18

[HttpException (0x80004005): Method not found: '!!0[] System.Array.Empty()'.]
   System.Web.HttpApplicationFactory.EnsureAppStartCalledForIntegratedMode(HttpContext context, HttpApplication app) +483
   System.Web.HttpApplication.RegisterEventSubscriptionsWithIIS(IntPtr appContext, HttpContext context, MethodInfo[] handlers) +118
   System.Web.HttpApplication.InitSpecial(HttpApplicationState state, MethodInfo[] handlers, IntPtr appContext, HttpContext context) +176
   System.Web.HttpApplicationFactory.GetSpecialApplicationInstance(IntPtr appContext, HttpContext context) +350
   System.Web.Hosting.PipelineRuntime.InitializeApplication(IntPtr appContext) +305

[HttpException (0x80004005): Method not found: '!!0[] System.Array.Empty()'.]
   System.Web.HttpRuntime.FirstRequestInit(HttpContext context) +661
   System.Web.HttpRuntime.EnsureFirstRequestInit(HttpContext context) +96
   System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest wr, HttpContext context) +189

第一次发生在我身上,所以我现在被困住了


Answers:


232

我在生产服务器上遇到这种情况,而在开发机上一切正常。

在目标计算机上安装.NET Framework 4.6已解决此问题。


46
PC负载字母!
JeremyWeir '16

9
谢谢。最有可能发生的事情是:-代码正在针对.NET 4.6进行编译,其中引用程序集包括Array.Empty <T>()。-Roslyn编译器看到Array.Empty <T>可用,因此在生成参数所需的空数组时使用它。-编译后的应用程序试图在不退出Array.Empty的.NET 4.5上运行。
wkalter

2
我们的Windows 2008R2 Server必须在安装后重新启动一次。
卡尔,

2
当寻找答案时,发现了该线程,该线程为为什么会发生提供了更多背景信息github.com/dotnet/roslyn/issues/4889
Reuven Abliyev

我安装了.net461,但仍然遇到相同的错误。安装net472帮了我
大忙

27

很抱歉参加聚会晚了,但是如果其他人通过TeamCity构建遇到了这个问题,我可以描述一下我们要做的事情。

.NET 4.6已安装在我们的构建服务器上(但未安装在应用程序服务器上),并且RunnerType是Visual Studio(sln),并且Visual Studio选项设置为2015。

这强制构建使用4.6,并且我需要将Visual Studio选项更改为2013以强制构建使用4.5.2。


5
我的一个好同事向我指出,如果您的构建代理有DotNetFrameworkTargetingPack4.5.2_Path TeamCity的要求,那么即使安装了4.6,您也可以使用Visual Studio 2015进行构建
gautejohan 2016年

2
我通过使用@gman建议的4.5.2开发包解决了此问题。在您不想安装4.6的情况下,这似乎是一个更好的解决方案。
Dougc

多年后问,这是给你@Dougc。我处于类似情况,我不希望安装4.6,而我却安装了4.5.2。我仍然遇到这个问题。gman建议的是什么?
singsuyash

@singsuyash,在项目配置中,转到“代理要求”。在此处单击添加新需求。在参数名称中键入DotNetFrameworkTargetingPack4.5.2_Path并将条件设置为存在。
gautejohan '16

11

仅针对面临这种情况的其他人:

如果查看web.config文件,您将意识到在<compilation>标记中您将值targetFramework设置为4.6以下的版本。但是实际上,在构建时,您是通过.NET FrameWork 4.6或更高版本(对应于ASP.NET MVC 4.6或更高版本)发布的。

因此,如果将值更改targetFramework为4.6,则错误将形状更改为:

“ targetFramework”属性当前引用的版本晚于.NET Framework的已安装版本。

这是真正的错误,可以通过在Web App的生产环境中安装适当版本的.Net FrameWork来消除它。


但是,执行此操作之后,并且根据创建应用程序时选择的项目模板,如果您安装了Insight和codeDom应用程序,则可能必须像我一样卸载它们。我收到一个数组错误,该错误可以追溯到roslyn和Microsoft Application Insight。
Clarence

3

将.NET Framework更新到最新版本(4.7.2)解决了该问题。 感谢@Andrey Kovalenko提供的解决方案。

但是错误不应该是这样的,

在此处输入图片说明

我不确定是否告诉每个客户有关更新其.NET Framework的信息。特别是在Windows Embedded OS安装的系统中,只有在生产环境中,我才遇到此问题。

从我们的代码库本身,还有其他方法可以克服该行为吗?


1
针对我的项目和所有DLL项目的较旧.NET Framework(4.0客户端配置文件)也可以工作。:)
Naveen Kumar V

2

我尝试这些解决方案没有成功。

对我来说,解决方案是转到应用程序池,转到2.0,在浏览器上执行该网站,查看错误(因为版本错误),然后返回4.0,然后“打开”,我明白了,网站打开了。


2

也许为时已晚,但我遇到了同样的问题,并已修复如下。我使用Visual Studio 2015,默认情况下web.config上的配置编译指向.NET FrameWork 4.6。我不能只在web.config文件上进行编辑。如果您无法在服务器上安装.NET FrameWork 4.6,并且您的应用程序不要使用它。

  1. 转到菜单调试> [项目名称]属性>应用程序。
  2. 从“目标框架”下拉列表中选择.NET Framework 4.5(或任何与您的应用程序兼容的服务器)。
  3. 再次重建。

0

在我的情况下,我在Windows Server 2012 R2上安装了损坏的.NET。我必须安装更新版本的.NET(v4.7.1),该站点现在可以正常工作。


0

就我而言,我无法访问IIS本身,而当我使用单一方法时,却遇到了这个问题,该方法只具有.net 2中没有的特殊功能。

解决方案:我已经提取了该方法,并使用.net 2.0创建了一个类库,它可以工作。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.