プロジェクトは、.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で動作する場合は動作します。
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
には何も見つかりません。参照元を検索するにはどうすればよいですか?
解決策は 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以降のバージョンが必要です。
.csprojファイルを手動で編集し、以下の参照を追加するとうまくいきました。
<Reference Include="netstandard" />
こちら を提案してくれたFahad Alshayaに感謝します。
私はこのスレッドで他の人の答えを組み合わせなければなりませんでした。
1/NuGetを介してNetStandard.Libraryをインストールします。 2/.csprojファイルを手動で編集し、参照を追加する
<Reference Include="netstandard" />
3 /展開プロジェクト-> VSソリューションエクスプローラーの参照。「netstandard」を右クリックしてプロパティページを表示し、「ローカルコピー」をtrueに設定します。
私は以前にこれに遭遇しました、そして、いくつかのことを試みることは私のためにそれを修正しました:
また、これが完全なフレームワークで実行されている.netコアアプリの場合、プロジェクトのルートに global.json ファイルを含め、必要なSDKを指す必要があることがわかりましたそのプロジェクトに使用するには:
{
"sdk": {
"version": "1.0.0-preview2-003121"
}
}
BinフォルダーとObjフォルダーを削除するとうまくいきました。
.NET Core 1.1を2.1にアップグレードするときにこれを経験しました。
こちら に概説されている指示に従いました。
.csprojの<RuntimeFrameworkVersion>1.1.1</RuntimeFrameworkVersion>
または<NetStandardImplicitPackageVersion>
セクションを削除してください。
これは古いスレッドですが、今日同じ問題がありました。先週、NuGetパッケージを更新しました。テストサーバーに公開すると、MVC Webサイトが開発マシンで正常に機能しましたが失敗しました。
多数の記事を読みましたが、どれも機能しませんでした。私は最終的にローカルビンのDLLをテストサーバーのDLLと比較し、netstandard.dllがアップロードされていないことを発見しました.Webサイトをアップロードすると正常に機能しましたが、VS2017 WebデプロイがDLLを公開しなかった理由はわかりません。
上記のどれもあなたのために働かない場合に注意するためにちょうど何か。
4.6.1から4.7.2に移行したアプリケーションをデプロイした後、本番サーバーでこのエラーが発生し始めました。
.NET framework 4.7.2がインストールされていないことに気付きました。この問題を解決するために、次の手順を実行しました。
.NET Framework 4.7.2を以下からインストールしました。
マシンを再起動しました
。NETバージョンの確認方法 の助けを借りて.NET Frameworkのバージョンを確認しました
マシンにインストールされた.Net Framework 4.7.2バージョンでアプリケーションを再度実行すると、問題が修正されました。
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>
ここに画像の説明を入力してください net standard.dllプロパティでCopy Enableをtrueに設定します。
ソリューションエクスプローラーを開き、netstandard.dllを右クリックします。ローカルコピーをtrueに設定します。
.NET4.6.1ライブラリに.NETStandard依存関係を追加して、Mono 4.6.2(Ubuntu 16.04に付属のバージョン)でLinuxでコンパイルしようとすると、この問題に直面していました。
今日、ようやく解決しました。ソリューションでは、次の両方を実行する必要があります。
<TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>
から<TargetFrameworkVersion>v4.7.1</TargetFrameworkVersion>
.csprojファイル内。私は同じ問題に直面しています
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
次のいずれかを行う必要があります。