アセンブリ 'netstandard, Version=2.0.0.0 への参照を追加する必要があります。質問する

アセンブリ 'netstandard, Version=2.0.0.0 への参照を追加する必要があります。質問する

このプロジェクトは、.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 アプリのみで、Windows IIS でホストされています。Windows IIS にはフレームワーク 4.6.1 がインストールされており、サーバーには NET Core はインストールされていません。

では、なぜ への参照を追加するように要求されるのでしょうか?完全な Windows .NET Framework 4.6.1 をnetstandard参照せずにこれを修正するにはどうすればよいでしょうか?netstandard

以前のコミットをチェックアウトしましたが、問題なく動作しました。それでもこのエラーが発生します。したがって、これは NuGet パッケージのアップグレードとは関係ありません。ローカル開発マシンに問題があるようです。

アプリをディレクトリに公開し、IIS で実行すると動作します。

.csproj gistへのリンク

パッケージ.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、バージョン = 2.0.0.0、Culture = 中立、PublicKeyToken = cc7b13ffcd2ddd51。依存関係は次のとおりです: System.Transactions、バージョン = 4.0.0.0、Culture = 中立、PublicKeyToken = b77a5c561934e089。依存アセンブリがターゲット フレームワークに対して正しいことを確認するか、またはアドレス指定するターゲット フレームワークが依存アセンブリのものであることを確認する必要があります。

しかし、 では何も見つかりませんSystem.Transactions。 それを何を参照しているか検索するにはどうすればいいでしょうか?

ベストアンサー1

解決策はおそらく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 を使用していることは承知していますが、古いバージョンの Framework は .NET Standard 2.0 と完全に互換性がないため、.NET 4.7.1 を選択することが重要です。

私は、.NET Standard ライブラリを導入したときに、NUGET パッケージと参照が壊れるという多くの問題に直面したという苦い経験からこれを知っています。検討する必要があるもう 1 つの変更は、ファイルではなくPackageReferencesにアップグレードすることです。package.config

見るこのガイドまた、アップグレードを支援するツールただし、VS 15.7 以降のバージョンが必要です。

おすすめ記事