该项目是一个ASP。NET MVC Web应用程序针对。NET Framework 4.6.1。

突然之间(一些NuGet包升级了),我开始在运行时得到以下错误:

CS0012:“系统”类型。对象定义在一个不存在的程序集中 引用。你必须添加一个引用到程序集的netstandard, Version=2.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51'。

在我的主视图索引。cshtml,在一行中,我使用@Html。ActionLink

我确实有。net Core SDK 2.0和。net Framework 4.7.1安装在我的机器上,但我不想包括对它的引用。这只是一个。NET Framework web应用程序,它托管在Windows IIS上,安装的框架是4.6.1,服务器上没有安装NET Core。

那么为什么它要求添加对netstandard的引用呢?我怎么能修复它不引用netstandard,但完整的Windows .NET Framework 4.6.1?

我已经检查出了以前的提交,工作得很好,我仍然得到这个错误。所以这与NuGet包的升级无关。好像是我本地开发机器上的东西。

如果将应用发布到一个目录并在IIS下运行,它就可以工作。

链接到.csproj gist

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>

当使用VS2017发布应用程序到文件系统时,我在输出中得到以下警告:

The following assembly has dependencies on a version of the .NET Framework that is higher than the target and might not load correctly during runtime causing a failure: netstandard, Version=2.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51. The dependencies are: System.Transactions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089. You should either ensure that the dependent assembly is correct for the target framework, or ensure that the target framework you are addressing is that of the dependent assembly.

但我在system。transactions里什么都找不到。如何搜索引用它的内容?


当前回答

就我而言,我已经将我的VS 2019更新到5月21日的最新版本,但仍然有同样的问题。

我用

仔细查看错误消息 类型“Object”在未引用的程序集中定义。必须添加对程序集系统的引用。运行时,版本=4.0.0.0,文化=中立,PublicKeyToken=b03f5f7f11d50a3a 打开.csproj文件,在<ItemGroup>标签下添加一个新的<Reference>标签,如下所示

<参考包括= "系统。Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />

按照VS的提示重新加载一个项目,并重新构建,我没有看到同样的问题。

其他回答

我面临同样的问题,我现在安装应用程序工作良好

1-

<compilation debug="true" targetFramework="4.7.1">
      <assemblies>
        <add assembly="netstandard, Version=2.0.0.0, Culture=neutral, 
      PublicKeyToken=cc7b13ffcd2ddd51"/>
      </assemblies>
    </compilation>

2-添加参考

 **C:\Program Files (x86)\Microsoft Visual
Studio\2017\Professional\Common7\IDE\Extensions\Microsoft\ADL
 Tools\2.4.0000.0\ASALocalRun\netstandard.dll**

3-

将上述路径Dll复制到web服务器上的应用程序Bin文件夹

你可以添加到你的网络。在项目中配置。

当你把它添加到项目web时,它不会工作。config,因为它与MVC一起工作。

在netstandard.dll属性中将Copy Enbale设置为true。

打开解决方案资源管理器,右键单击netstandard.dll。 “本地复制”设置为“true”。

虽然我知道这是一个老问题,但我今天也遇到了同样的问题 您必须添加一个引用到程序集'netstandard, Version=2.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51',我遇到了一个更最新的答案。

它在本地构建,但一旦我把它推到构建服务器,它就出现了这个错误。对我来说,修复是确保构建代理使用VS2019,而不是即将退役的构建服务器上的VS2015。

虽然这是一个旧线程,我今天也有同样的问题,上周我更新了一些NuGet包,虽然MVC网站在我的开发机器上工作正常,但当我发布到测试服务器时,它失败了。

我读了很多帖子,但没有一个有用。我最终比较了我本地bin中的DLL和测试服务器中的DLL,发现netstandard.dll没有上传,上传后网站工作正常,不知道为什么VS2017 web部署没有发布DLL。

只是为了防止上面这些方法对你都不起作用。