Asp.net

您必須添加對程序集 ’netstandard, Version=2.0.0.0 的引用

  • April 19, 2018

該項目是一個面向 .NET Framework 4.6.1 的 ASP.NET MVC Web 應用程序。

突然之間(升級了一些 NuGet 包)我開始在執行時收到以下錯誤:

CS0012:“System.Object”類型是在未引用的程序集中定義的。您必須添加對程序集“netstandard,Version=2.0.0.0,Culture=neutral,PublicKeyToken=cc7b13ffcd2ddd51”的引用。

在我的主要觀點Index.cshtml中,在我使用的一行中@Html.ActionLink

我的機器上確實安裝了 .NET Core SDK 2.0 和 .NET Framework 4.7.1,但我不想包含對它的引用。這只是一個 .NET Framework Web 應用程序,它託管在已安裝框架為 4.6.1 的 Windows IIS 上,伺服器中沒有安裝 NET Core。

那麼為什麼要求添加對 的引用netstandard?如何在不參考netstandard完整的 Windows .NET Framework 4.6.1 的情況下修復它?

我已經檢查了以前的送出,它執行良好,但我仍然收到此錯誤。所以它與正在升級的 NuGet 包無關。似乎是我本地開發機器上的東西。

如果將應用程序發佈到目錄並使用 IIS 執行它,它就可以工作。

連結到 .csproj 要點

包.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 將應用程序發佈到文件系統時,我在輸出中收到以下警告:

以下程序集依賴於高於目標的 .NET Framework 版本,並且在執行時可能無法正確載入導致失敗:netstandard、Version=2.0.0.0、Culture=neutral、PublicKeyToken=cc7b13ffcd2ddd51。依賴項是:System.Transactions、Version=4.0.0.0、Culture=neutral、PublicKeyToken=b77a5c561934e089。您應該確保依賴程序集對於目標框架是正確的,或者確保您正在處理的目標框架是依賴程序集的框架。

但我找不到任何東西System.Transactions。如何搜尋引用它的內容?

我認為解決方案可能是GitHub 上的這個問題

嘗試在 web.config 中添加 netstandard 參考,如下所示:"

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

我知道您使用的是 4.6.1,但 .NET 4.7.1 的選擇很重要,因為較舊的 Framework 版本與 .NET Standard 2.0 不完全兼容。

我從痛苦的經歷中知道這一點,當我介紹 .NET Standard 庫時,我遇到了很多關於 NUGET 包和引用中斷的問題。您需要考慮的另一個更改是升級到PackageReferences而不是package.config文件。

請參閱本指南,您可能還需要一個工具來幫助升級。不過,它確實需要一個後期的 VS 15.7 版本。

引用自:https://stackoverflow.com/questions/49925484