Método não encontrado: '!! 0 [] System.Array.Empty ()'

123

Criei um novo aplicativo com o VS 2015 RC e o modelo MVC e, sem modificar nenhuma linha de código, tenho este erro:

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

Primeira vez que isso acontece comigo, então eu estou preso no momento

Luis Valencia
fonte
possível duplicata do MVC 5 Bundle Error
ramiramilu 06/07/2015

Respostas:

232

Eu tive essa situação no servidor de produção enquanto na máquina de desenvolvimento tudo estava bem.

A instalação do .NET Framework 4.6 na máquina de destino corrigiu o problema.

Andrey Kovalenko
fonte
46
CARTA DE CARGA DO PC!
21416 JeremyWeir
9
Obrigado. Provavelmente o que está acontecendo é o seguinte: - O código está compilando no .NET 4.6, onde os assemblies de referência incluem Array.Empty <T> (). - O compilador Roslyn vê que Array.Empty <T> está disponível e, portanto, o utiliza ao gerar a matriz vazia necessária para os parâmetros. - O aplicativo compilado está tentando executar no .NET 4.5, onde o Array.Empty não sai.
precisa saber é o seguinte
2
Nosso servidor Windows 2008R2 teve que reiniciar uma vez após a instalação.
777 Karl
2
Ao procurar resposta encontrada nesta discussão que dá um pouco mais fundo porque este é acontece github.com/dotnet/roslyn/issues/4889
Reuven Abliyev
Eu instalei .net461, mas ainda tinha o mesmo erro. Net472 Instalação fez o truque para mim
berniefitz
27

Desculpe por chegar atrasado à festa, mas, caso outra pessoa receba esse problema por meio de uma compilação do TeamCity, posso descrever o que tivemos que fazer.

O .NET 4.6 foi instalado em nosso servidor de compilação (mas não no servidor de aplicativos), e o RunnerType foi o Visual Studio (sln) e a opção Visual Studio foi definida como 2015.

Isso forçou a compilação a usar 4.6, e eu precisei alterar a opção do Visual Studio para 2013 para forçar a compilação a usar 4.5.2

gautejohan
fonte
5
Um bom colega meu apontou para mim que você pode construir com o Visual Studio 2015 se o seu agente de compilação tem a exigência DotNetFrameworkTargetingPack4.5.2_Path TeamCity, então, construir a solução para a 4.5.2, mesmo 4.6 está instalado
gautejohan
2
Resolvi esse problema usando o pacote de desenvolvimento 4.5.2, como o @gman sugeriu. Em situações em que você não deseja ter o 4.6 instalado, essa parece ser uma solução melhor.
Dougc 9/03/16
Perguntando depois de muitos anos, isso é para você @Dougc. Estou em uma situação semelhante, não quero o 4.6 instalado e tenho o 4.5.2 instalado. Ainda recebo esse problema. O que é que gman sugeriu?
precisa saber é o seguinte
@singsuyash, na configuração do projeto, acesse Requisitos do Agente. Lá você clica em adicionar novo requisito. Digite DotNetFrameworkTargetingPack4.5.2_Path no nome do parâmetro e configure a condição para existir.
gautejohan
11

Apenas para outros que enfrentam esta situação:

se você procurar no arquivo web.config, perceberá que na <compilation>tag você tem o valor targetFrameworkdefinido para uma versão abaixo de 4.6. mas, na verdade, no momento da criação, você publicou seu aplicativo via .NET FrameWork 4.6 ou superior (corresponde ao ASP.NET MVC 4.6 e superior).

Portanto, se você alterar o valor de targetFramework4,6, o erro mudará de forma para:

O atributo 'targetFramework' atualmente faz referência a uma versão posterior à versão instalada do .NET Framework.

esse é o erro real e você se livra dele instalando a Versão apropriada do .Net FrameWork no ambiente de produção do seu Web App.

AmiNadimi
fonte
No entanto, depois de fazer isso, e dependendo do modelo de projeto selecionado quando o aplicativo foi criado, se você tiver os aplicativos insight e codeDom instalados, poderá ser necessário desinstalá-los como eu fiz. Recebi um erro de matriz que remonta ao roslyn e ao Microsoft Application Insight.
Clarence
3

A atualização do .NET Framework para a versão mais recente (4.7.2) resolveu o problema. Obrigado a @Andrey Kovalenko pela solução.

Mas não deveria ser o erro,

insira a descrição da imagem aqui

Não tenho certeza de que é aplicável a cada cliente sobre a atualização do .NET Framework. Eu tive esse problema especialmente no sistema instalado no Windows Embedded OS , apenas no ambiente de produção.

Existe alguma outra maneira de superar o comportamento, a partir da nossa própria base de código.?

Naveen Kumar V
fonte
1
A segmentação do .NET Framework mais antigo (Perfil do Cliente 4.0) para o meu projeto e todos os projetos DLL também funcionou. :)
Nav Kumar V
2

Eu tento essas soluções sem sucesso.

A solução para mim foi ir para o pool de aplicativos, virar para 2.0, executar o site no navegador, ver o erro (porque a versão está errada) e voltar para 4.0 e "voilà", entendi, o site aberto.

Roberto Gentile
fonte
2

Talvez seja tarde demais, mas eu tive o mesmo problema e resolvi como abaixo. Eu uso o Visual Studio 2015, a compilação de configuração no web.config aponta para o .NET FrameWork 4.6 por padrão. Eu não poderia apenas editar apenas no arquivo web.config. Se você não pode instalar o .NET FrameWork 4.6 no servidor e seu aplicativo não o utiliza.

  1. Vá para o menu Debug> [Nome do projeto] Propriedades> Aplicativo.
  2. escolha o .NET Framework 4.5 (ou qualquer servidor que suporte e compatível com seu aplicativo) na lista suspensa Target Framwork.
  3. Reconstrua novamente.
waewta artpongsa
fonte
0

No meu caso, eu tinha uma instalação .NET corrompida no meu Windows Server 2012 R2. Eu tive que instalar uma versão mais recente do .NET (v4.7.1) e o site está funcionando agora.

André Hauptfleisch
fonte
0

No meu caso, não tenho acesso ao próprio IIS e estava tendo esse problema quando estava usando um método único que não possui nada de especial, apenas coisas do .net 2.

A solução: eu extraí esse método e criei uma biblioteca de classes com o .net 2.0 e ele funciona.

Ricardo França
fonte
0

Eu rebaixei 4.6.x para 4.5.2 e funcionou bem.

Bhavesh Patel
fonte