O projeto é um ASP.NET MVC Web App voltado para o .NET Framework 4.6.1.
De repente (alguns pacotes NuGet foram atualizados) comecei a receber o seguinte erro durante o tempo de execução:
CS0012: O tipo 'System.Object' é definido em um assembly que não é referenciado. Você deve adicionar uma referência ao assembly 'netstandard, Version = 2.0.0.0, Culture = neutral, PublicKeyToken = cc7b13ffcd2ddd51'.
Na minha visão principal Index.cshtml
, em uma linha onde faço uso de@Html.ActionLink
Tenho o .NET Core SDK 2.0 e o .NET Framework 4.7.1 instalados em minha máquina, mas não quero incluir uma referência a eles. Este é apenas um aplicativo da web .NET Framework, está hospedado no Windows IIS onde a estrutura instalada é 4.6.1, não há NET Core instalado no servidor.
Então, por que está pedindo para adicionar uma referência a netstandard
? Como posso corrigir isso sem fazer referência netstandard
a todo o Windows .NET Framework 4.6.1?
Eu verifiquei um commit anterior que funcionou bem e ainda estou recebendo este erro. Portanto, não está relacionado aos pacotes NuGet sendo atualizados. Parece ser algo na minha máquina de desenvolvimento local.
Se você publicar o aplicativo em um diretório e executá-lo com o IIS, ele funcionará.
packages.config
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Antlr" version="3.5.0.2" targetFramework="net46" />
<package id="BundleTransformer.Core" version="1.9.69" targetFramework="net46" />
<package id="BundleTransformer.Handlebars" version="1.9.73" targetFramework="net46" />
<package id="BundleTransformer.Less" version="1.9.69" targetFramework="net46" />
<package id="BundleTransformer.Yui" version="1.9.52" targetFramework="net46" />
<package id="Dapper" version="1.42" targetFramework="net46" />
<package id="EcmaScript.Net" version="1.0.1.0" targetFramework="net46" />
<package id="EntityFramework" version="6.0.0" targetFramework="net46" />
<package id="Glimpse" version="1.8.6" targetFramework="net46" />
<package id="Glimpse.AspNet" version="1.9.2" targetFramework="net46" />
<package id="Glimpse.Mvc5" version="1.5.3" targetFramework="net46" />
<package id="JavaScriptEngineSwitcher.Core" version="1.2.4" targetFramework="net46" />
<package id="JavaScriptEngineSwitcher.V8" version="1.3.0" targetFramework="net46" />
<package id="jQuery" version="2.1.3" targetFramework="net46" />
<package id="jQuery.Validation" version="1.13.1" targetFramework="net46" />
<package id="LowercaseDashedRoute" version="1.0.14" targetFramework="net46" />
<package id="Microsoft.AspNet.Mvc" version="5.2.3" targetFramework="net46" />
<package id="Microsoft.AspNet.Razor" version="3.2.3" targetFramework="net46" />
<package id="Microsoft.AspNet.Web.Optimization" version="1.1.3" targetFramework="net46" />
<package id="Microsoft.AspNet.WebApi" version="5.2.3" targetFramework="net46" />
<package id="Microsoft.AspNet.WebApi.Client" version="5.2.3" targetFramework="net46" />
<package id="Microsoft.AspNet.WebApi.Core" version="5.2.3" targetFramework="net46" />
<package id="Microsoft.AspNet.WebApi.WebHost" version="5.2.3" targetFramework="net46" />
<package id="Microsoft.AspNet.WebPages" version="3.2.3" targetFramework="net46" />
<package id="Microsoft.jQuery.Unobtrusive.Validation" version="3.2.3" targetFramework="net46" />
<package id="Microsoft.Owin" version="3.0.1" targetFramework="net46" />
<package id="Microsoft.Owin.Host.SystemWeb" version="3.0.1" targetFramework="net46" />
<package id="Microsoft.SqlServer.Compact" version="4.0.8876.1" targetFramework="net46" />
<package id="Microsoft.Web.Infrastructure" version="1.0.0.0" targetFramework="net46" />
<package id="Moment.js" version="2.10.2" targetFramework="net46" />
<package id="Newtonsoft.Json" version="10.0.3" targetFramework="net46" />
<package id="NWebsec" version="5.1.1" targetFramework="net46" />
<package id="NWebsec.Core" version="2.1.0" targetFramework="net46" />
<package id="NWebsec.Mvc" version="5.1.1" targetFramework="net46" />
<package id="Owin" version="1.0" targetFramework="net46" />
<package id="Respond" version="1.4.2" targetFramework="net46" />
<package id="Sendgrid" version="6.3.0" targetFramework="net46" />
<package id="SendGrid.SmtpApi" version="1.3.1" targetFramework="net46" />
<package id="Serilog" version="2.6.0" targetFramework="net46" />
<package id="Serilog.Enrichers.Environment" version="2.1.2" targetFramework="net46" />
<package id="Serilog.Sinks.File" version="3.2.0" targetFramework="net46" />
<package id="Serilog.Sinks.RollingFile" version="3.3.0" targetFramework="net46" />
<package id="Serilog.Sinks.Sentry" version="2.1.4" targetFramework="net46" />
<package id="SerilogWeb.Classic" version="2.1.17" targetFramework="net46" />
<package id="SharpRaven" version="2.2.0" targetFramework="net46" />
<package id="System.Data.SQLite" version="1.0.108.0" targetFramework="net46" />
<package id="System.Data.SQLite.Core" version="1.0.108.0" targetFramework="net46" />
<package id="System.Data.SQLite.EF6" version="1.0.108.0" targetFramework="net46" />
<package id="System.Data.SQLite.Linq" version="1.0.108.0" targetFramework="net46" />
<package id="Twitter.Bootstrap.Less" version="3.3.4" targetFramework="net46" />
<package id="WebActivatorEx" version="2.0.6" targetFramework="net46" />
<package id="WebGrease" version="1.6.0" targetFramework="net46" />
<package id="YUICompressor.NET" version="2.7.0.0" targetFramework="net46" />
</packages>
Ao publicar o aplicativo usando VS2017 no sistema de arquivos, recebo o seguinte aviso na saída:
O seguinte assembly tem dependências de uma versão do .NET Framework superior ao destino e pode não carregar corretamente durante o tempo de execução, causando uma falha: netstandard, Version = 2.0.0.0, Culture = neutral, PublicKeyToken = cc7b13ffcd2ddd51. As dependências são: System.Transactions, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = b77a5c561934e089. Você deve garantir que o assembly dependente esteja correto para a estrutura de destino ou certifique-se de que a estrutura de destino que você está endereçando seja aquela do assembly dependente.
Mas não consigo encontrar nada System.Transactions
. Como posso pesquisar o que está referenciando isso?
System.Data.SQLite.Core
pacote é baseado em .NET Core (ou .NET Standard, não procurei a fonte ou os documentos). Observe a mensagem de erro no final do arquivo de projeto.packages\System.Data.SQLite.Core.1.0.108.0\lib
diretório e ele contém uma pasta para cada versão do .NET Framework, incluindo 4.6, que é o que estou usando. Não acho que seja esse o problema aqui.Respostas:
Acho que a solução pode ser este problema no GitHub :
Sei que você está usando o 4.6.1, mas a escolha do .NET 4.7.1 é significativa, pois as versões anteriores do Framework não são totalmente compatíveis com o .NET Standard 2.0.
Sei disso por experiência dolorosa, quando apresentei as bibliotecas .NET Standard, tive muitos problemas com pacotes NUGET e referências quebrando. A outra mudança que você precisa considerar é a atualização para PackageReferences em vez de
package.config
arquivos.Consulte este guia e você também pode querer uma ferramenta para ajudar na atualização . No entanto, ele requer uma versão final do VS 15.7.
fonte
<add assembly="netstandard
estava faltando e também o httpRuntime não era 4.7.1- Esta é a resposta! Obrigado !!Editar manualmente o arquivo .csproj e adicionar a referência abaixo funcionou para mim.
Obrigado a Fahad Alshaya que sugeriu aqui .
fonte
Eu tive que fazer uma combinação das respostas de outras pessoas neste tópico.
<Reference Include="netstandard" />
fonte
Já deparei com isso antes e tentei várias coisas para consertar:
Além disso, se este for um aplicativo principal .net em execução na estrutura completa, descobri que você precisa incluir um arquivo global.json na raiz do seu projeto e apontá-lo para o SDK que deseja usar para esse projeto:
fonte
A exclusão das pastas Bin e Obj funcionou para mim.
fonte
Depois de atualizar da estrutura 4.6.1 para 4.7.2, começamos a receber este erro:
"O tipo 'System.Object' é definido em um assembly que não é referenciado. Você deve adicionar uma referência ao assembly 'netstandard, Version = 2.0.0.0, Culture = neutral, PublicKeyToken = cc7b13ffcd2ddd51'." e, finalmente, a solução foi adicionar a referência de montagem "padrão da rede" mencionada acima:
fonte
<Reference Include="netstandard" />
ao arquivo csproj, MAS ... isso só funciona se você TAMBÉM definir CopyLocal como true. Nada disso faz algum sentido.Embora este seja um tópico antigo, tive o mesmo problema hoje, na semana passada atualizei alguns pacotes NuGet e, embora o site MVC tenha funcionado bem na minha máquina de desenvolvimento quando publiquei no servidor de teste, ele falhou.
Eu li vários posts, mas nenhum funcionou. Eu finalmente comparei as DLLs em meu compartimento local com as do servidor de teste e descobri que o netstandard.dll não foi carregado, uma vez carregado o site funcionou bem, não sei por que VS2017 web deploy não publicou a DLL.
Apenas algo a observar caso nenhuma das opções acima funcione para você.
fonte
Eu experimentei isso ao atualizar o .NET Core 1.1 para 2.1.
Eu segui as instruções descritas aqui .
Tente remover
<RuntimeFrameworkVersion>1.1.1</RuntimeFrameworkVersion>
ou<NetStandardImplicitPackageVersion>
seção no .csproj.fonte
Começamos a receber esse erro no servidor de produção após implantar o aplicativo migrado de 4.6.1 para 4.7.2.
Percebemos que o .NET framework 4.7.2 não foi instalado lá. Para resolver esse problema, realizamos as seguintes etapas:
Instalou o .NET Framework 4.7.2 de:
https://support.microsoft.com/en-us/help/4054530/microsoft-net-framework-4-7-2-offline-installer-for-windows
Reiniciou a máquina
Confirmei a versão do .NET Framework com a ajuda de Como encontro a versão do .NET?
Executar o aplicativo novamente com a versão .Net Framework 4.7.2 instalada na máquina corrigiu o problema.
fonte
Estou enfrentando o mesmo problema que faço seguindo o Setup Now Application Work bem
1-
2- Adicionar Referência
3-
Copy Above Path Dll to Application Bin Folder on web server
fonte
Pode ter a ver com um destes:
fonte
insira a descrição da imagem aqui Defina Copy Enbale como true nas propriedades netstandard.dll.
Abra o Gerenciador de Soluções e clique com o botão direito em netstandard.dll. Defina Copiar local como verdadeiro.
fonte
Eu estava enfrentando esse problema ao tentar adicionar uma dependência .NETStandard a uma biblioteca .NET4.6.1 e compilá-la no Linux com Mono 4.6.2 (a versão que vem com Ubuntu 16.04).
Eu finalmente resolvi hoje; a solução requer fazer as duas coisas:
<TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>
para<TargetFrameworkVersion>v4.7.1</TargetFrameworkVersion>
no arquivo .csproj.fonte
Você pode adicionar ao seu web.config em seu projeto.
Não funcionaria quando você o adicionasse aos projetos web.config porque funciona com MVC.
fonte
No meu caso, descobri que o nuget problemático era System.Memory na versão 4.5.1. quando atualizado para a versão 4.5.3 funciona !!
fonte
Aqueles que não possuem o arquivo web.config. Tipo de saída diferente de aplicativo da web. atualize o arquivo do projeto (.csproj) com o código a seguir.
Pode causar devido à adição / remoção do .netframework de forma inadequada ou pode quebrar de forma inesperada.
Tipo de saída
fonte
Este problema é baseado na sua versão instalada do Visual Studio e Windows, você pode seguir as seguintes etapas: -
rebaixou seu PCL com o seguinte comando
fonte