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


123

プロジェクトは、.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 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。それを参照しているものを検索するにはどうすればよいですか?


1
どのNuGetパッケージを使用していますか?ASP.NET Coreのものを参照していないのですか?
Ricardo Peres

@RicardoPeres VS2017では、プロジェクトが対象としているフレームワークとは異なるフレームワークを対象としたパッケージを追加できません。すべてのパッケージをアンインストールして再インストールしましたが、エラーは同じです。なぜそれが発生するのか、また実行時になぜなのかさえ理解できません...
emzero

2
System.Data.SQLite.Coreパッケージは、.NETのコアに基づいている(または.NET標準、私はソースやドキュメントを探して行きませんでした)。プロジェクトファイルの最後にあるエラーメッセージを確認します。
McGuireV10

.NET Coreをベースにしていると言うのはなぜですか?私はpackages\System.Data.SQLite.Core.1.0.108.0\libディレクトリを見ています。そこには、使用している4.6を含む、.NET Frameworkの各バージョンのフォルダーが含まれています。ここでは問題ではないと思います。
emzero

2
このような解決できない問題が発生した場合、私が行うことは、1)プロジェクトの参照を注意深くメモする(または.csprojをどこかに保存する)、2)packages.configファイルを削除する、すべての外部参照を削除する(または、新しいプロジェクトを作成できる)元の静的ファイル、.csなどを使用して最初からのみ)、3)Legagy packages.configモードの代わりにパッケージ参照を使用するようにVS Nugetを構成します。docs.microsoft.com / en-us / nuget / reference / および4)必要なすべての参照を元に戻します。ほとんどの場合、それは機能し、以前に失敗した理由はわかりません。
Simon Mourier

回答:


181

解決策はGitHubのこの問題かもしれません:

次のようにweb.configにネットスタンダード参照を追加してみてください: "

<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標準ライブラリを紹介したときの苦痛な経験からわかっています。NUGETパッケージと参照の破損に関する多くの問題がありました。考慮する必要があるもう1つの変更は、ファイルではなくPackageReferencesにアップグレードすることpackage.configです。

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


2
ここに到着した人は誰でも、Newtonsoft.JSONの作者によるオープンソースライブラリの作成に関するこの優れたガイダンスを参照する必要があると思います。docs.microsoft.com/ en - us / dotnet / standard / library - guidance / -特に「回避netstandard1.x "ターゲットを含み、.NETstandard 2.0をサポートする最も低い実際のバージョンとして.NET 4.7.2を使用
Quango

v4.7.2(非コアアプリ)にアップグレードし、次のような例外が発生したときに必要なもの:「型 'DateTime'は参照されていないアセンブリで定義されています。アセンブリ 'netstandard、Versionへの参照を追加する必要があります= 2.0.0.0、文化がニュートラル=、なPublicKeyToken = cc7b13ffcd2ddd51' 。
テッド

これはcsprojファイルの参照にも追加する必要がありますか、それともweb.configでのみ必要ですか?
petrosmm 2018

1
すばらしい答えです。ありがとう。私は古いユーティリティパッケージをアップグレードしていて、代わりに新しい標準2.0を使用していました。特にこのWebアプリに<add assembly="netstandardは、がなく、httpRuntimeも4.7.1ではなかったため問題がありました-これが答えです!ありがとう!!
Piotr Kula

私たちの場合、4.7.2 ASP.Netプロジェクトで使用されているいくつかの標準2.0アセンブリがありましたが、System.Text.Json.Serialization名前空間からいくつかのJsonConverterを標準2.0プロジェクトの1つに追加したため、このエラーが発生しました。このソリューションで問題が解決しました。
ShaneH

35

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

<Reference Include="netstandard" />

ここで提案してくれたファハドアルシャヤに感謝します。


これはプロジェクトファイルのどこに配置する必要がありますか?他のどの「タグ」の中に?
ユリシーズアルベス

1
@UlyssesAlves他の参照タグの隣のどこかに
kamilk

@kamilkの「どこか隣のどこか」はあまり正確ではありません。さて、私は他のいくつかのプロジェクトを見ましたが、残念ながらこれは私にとってはうまくいかなかったので、プロジェクトの.netバージョンを変更することを含まない別の観点からこの問題を攻撃することにしました。
ユリシーズアルベス

1
これは私にとってはうまくいき、NuGetを介してNetStandard.Libraryをインストールする必要もありました。
David Acero

「あなたを捕まえる」ささいなこと...素晴らしい答え。
Benj Sanders、

15

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

  1. NuGetを介してNetStandard.Libraryをインストールします。
  2. .csprojファイルを手動で編集し、参照を追加します。 <Reference Include="netstandard" />
  3. VS Solution Explorerでプロジェクトを展開し、[参照]をクリックします。[netstandard]を右クリックしてプロパティページを表示し、[ローカルにコピー]をtrueに設定します。

3
「ローカルにコピー」を設定すると、私のためにそれを行いました。
FrenkyB

1
このソリューションは完全に機能し、さらにプロジェクトはデバッグモードでのコンパイルに依存しません。
DarkHawk

6

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

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

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

{
  "sdk": {
    "version": "1.0.0-preview2-003121"
  }
}

2
すべてを試しましたが、運はありませんでした。私が言ったように、これは.NET Coreプロジェクトではありません。これは通常の.NET Framework 4.6.1です。
emzero

VSを閉じ、ビンを削除し、.vsを削除します。
リードシルト


5

4.6.1フレームワークから4.7.2にアップグレードした後、このエラーが発生し始めました:

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

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

1
これは機能します。(この変更なしで)機能するもう1つのことは<Reference Include="netstandard" />、csprojファイルにを追加することですが、これは、CopyLocalをtrueに設定した場合にのみ機能します。これは意味がありません。
Triynko

1

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

私は多数の投稿を読みましたが、どれもうまくいきませんでした。最後に、ローカルビンのDLLとテストサーバーのDLLを比較したところ、netstandard.dllがアップロードされていないことがわかりました。いったんアップロードされたWebサイトは問題なく動作しましたが、VS2017 WebデプロイがDLLを公開しなかった理由がわかりません。

上記のいずれもうまくいかない場合に備えて、注意が必要です。


1

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

私はここで概説されている指示に従いました。

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


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

私は同じ問題に直面しています私は今すぐセットアップに従ってアプリケーションを正常に動作させます

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


これはどこに文書化されていますか?誰もがこの行をweb.configファイルに入れるとどう思いますか?ちなみに、同じように機能するのは、「netstandard」を参照する行をcsprojに追加し、CopyLocalをtrueに設定することです。たとえそうであっても、それは参照ダイアログの可能な参照としてどこにもリストされていないので、それを取得する唯一の方法はそれを手動で追加することです。これは非常識です。また、.NET標準と完全に互換性があると想定される.NET 4.7.2を対象としていますが、それを機能させるには、これらのあいまいな手順を実行する必要があります。
Triynko

0

これらのいずれかを行う必要があるかもしれません:

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

うまくいけば、もうすぐそこに来ます。「NETStandard.Library.NETFrameworkの代わりにNETStandard.Libraryへの参照を追加しました」この投稿を確認してください:github.com/dotnet/standard/issues/391
ivw

通常、System.Transactionsは参照の一部ではありません。参照に追加してみてください。Webアプリケーションを使用している場合は参照を右クリックし、Webサイトを使用している場合はプロジェクトを右クリックします。.NETリファレンスでSystem.Transactionsを見つけます。参照にSystem.Transactionsがあるはずです。
ivw 2018


0

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

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

  1. .csprojファイルでに変更<TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion><TargetFrameworkVersion>v4.7.1</TargetFrameworkVersion>ます。
  2. モノを新しいバージョンにアップグレードします。5.xは動作すると思いますが、確かに、Mono 6.8.0.105を含むUbuntu 20.04(執筆時点ではプレビュー版のみ)をインストールするだけで十分です。

0

プロジェクトのweb.configに追加できます。

MVCで動作するため、プロジェクトweb.configに追加すると機能しません。


0

私の場合、問題のあるnugetはバージョン4.5.1のSystem.Memoryであることがわかりました。バージョン4.5.3に更新すると動作します!!


0

web.configファイルがない人。Webアプリケーション以外の出力タイプ。以下のコードでプロジェクトファイル(.csproj)を更新します。

不適切な方法で.netframeworkを追加/削除したり、予期しない方法で破損したりする可能性があります。

  <ItemGroup>
    <Reference Include="netstandard" />
  </ItemGroup>

出力タイプ

  • コンソールアプリケーション
  • クラスライブラリ

-5

この問題は、インストールされているVisual StudioおよびWindowsのバージョンに基づいており、次の手順に従ってください。

  1. コマンドウィンドウに移動
  2. 次のコマンドでPCLをダウングレードしました

    Install-Package Xamarin.Forms -Version 2.5.1.527436
  3. プロジェクトを再構築します。
  4. 今、あなたは必要な出力を見ることができます
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.