web-dev-qa-db-ja.com

Assembly '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でホストされています。インストールされているフレームワークは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を使用してアプリをファイルシステムに公開すると、出力に次の警告が表示されます。

次のアセンブリは、ターゲットよりも高いバージョンの.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には何も見つかりません。参照元を検索するにはどうすればよいですか?

102
emzero

解決策は 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パッケージと参照の破損で多くの問題を抱えていたので、これは痛みを伴う経験から知っています。考慮する必要がある他の変更は、package.configファイルの代わりにPackageReferencesにアップグレードすることです。

このガイド を参照してください。また、 アップグレードを支援するツール も必要になる場合があります。ただし、VS 15.7以降のバージョンが必要です。

138
Quango

.csprojファイルを手動で編集し、以下の参照を追加するとうまくいきました。

<Reference Include="netstandard" />

こちら を提案してくれたFahad Alshayaに感謝します。

29
kamilk

私はこのスレッドで他の人の答えを組み合わせなければなりませんでした。

1/NuGetを介してNetStandard.Libraryをインストールします。 2/.csprojファイルを手動で編集し、参照を追加する

<Reference Include="netstandard" />

3 /展開プロジェクト-> VSソリューションエクスプローラーの参照。「netstandard」を右クリックしてプロパティページを表示し、「ローカルコピー」をtrueに設定します。

6
Damien Sawyer

私は以前にこれに遭遇しました、そして、いくつかのことを試みることは私のためにそれを修正しました:

  • Binフォルダーが存在する場合は削除します
  • 非表示の.vsフォルダーを削除します
  • 4.6.1ターゲティングパックがインストールされていることを確認してください
  • Last Ditch Effort:System.Runtimeへの参照を追加します(プロジェクトを右クリック->追加->参照-> System.Runtimeの横にあるボックスにチェックを入れます)。これを行うの。

また、これが完全なフレームワークで実行されている.netコアアプリの場合、プロジェクトのルートに global.json ファイルを含め、必要なSDKを指す必要があることがわかりましたそのプロジェクトに使用するには:

{
  "sdk": {
    "version": "1.0.0-preview2-003121"
  }
}
4
Kyle Dodge

BinフォルダーとObjフォルダーを削除するとうまくいきました。

2
Vijay Verma

.NET Core 1.1を2.1にアップグレードするときにこれを経験しました。

こちら に概説されている指示に従いました。

.csprojの<RuntimeFrameworkVersion>1.1.1</RuntimeFrameworkVersion>または<NetStandardImplicitPackageVersion>セクションを削除してください。

1
h-rai

これは古いスレッドですが、今日同じ問題がありました。先週、NuGetパッケージを更新しました。テストサーバーに公開すると、MVC Webサイトが開発マシンで正常に機能しましたが失敗しました。

多数の記事を読みましたが、どれも機能しませんでした。私は最終的にローカルビンのDLLをテストサーバーのDLLと比較し、netstandard.dllがアップロードされていないことを発見しました.Webサイトをアップロードすると正常に機能しましたが、VS2017 WebデプロイがDLLを公開しなかった理由はわかりません。

上記のどれもあなたのために働かない場合に注意するためにちょうど何か。

1

4.6.1から4.7.2に移行したアプリケーションをデプロイした後、本番サーバーでこのエラーが発生し始めました。

.NET framework 4.7.2がインストールされていないことに気付きました。この問題を解決するために、次の手順を実行しました。

  1. .NET Framework 4.7.2を以下からインストールしました。

    https://support.Microsoft.com/en-us/help/4054530/Microsoft-net-framework-4-7-2-offline-installer-for-windows

  2. マシンを再起動しました

  3. 。NETバージョンの確認方法 の助けを借りて.NET Frameworkのバージョンを確認しました

マシンにインストールされた.Net Framework 4.7.2バージョンでアプリケーションを再度実行すると、問題が修正されました。

1
Raghav

4.6.1フレームワークから4.7.2にアップグレードした後、次のエラーが表示され始めました。

「参照されていないアセンブリでタイプ「System.Object」が定義されています。アセンブリ「netstandard、Version = 2.0.0.0、Culture = neutral、PublicKeyToken = cc7b13ffcd2ddd51」への参照を追加する必要があります。」最終的に解決策は、上記の「netstandard」アセンブリ参照を追加することでした。

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

ここに画像の説明を入力してください net standard.dllプロパティでCopy Enableをtrueに設定します。

ソリューションエクスプローラーを開き、netstandard.dllを右クリックします。ローカルコピーをtrueに設定します。

0
hani abukhurma

.NET4.6.1ライブラリに.NETStandard依存関係を追加して、Mono 4.6.2(Ubuntu 16.04に付属のバージョン)でLinuxでコンパイルしようとすると、この問題に直面していました。

今日、ようやく解決しました。ソリューションでは、次の両方を実行する必要があります。

  1. 変化する <TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>から<TargetFrameworkVersion>v4.7.1</TargetFrameworkVersion> .csprojファイル内。
  2. モノを新しいバージョンにアップグレードします。 5.xは機能するはずですが、確かに、Mono 6.8.0.105を含むUbuntu 20.04(執筆時点ではプレビューのみ)をインストールするだけで済みます。
0
knocte

私は同じ問題に直面しています

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-

Copy Above Path Dll to Application Bin Folder on web server

0
Mansoor

次のいずれかを行う必要があります。

  1. 新しいSDKをインストールします。
  2. .csprojでReference Include = "netstandard"を確認します
  3. Views\Web.configおよびWeb.configのコンパイルタグでアセンブリバージョンを確認します。
0
ivw