クラスライブラリのベースとなる 。NET Standard 2. プレビューを使用しています。
特にアーカイブの抽出に関して、いくつかのNuGetパッケージで問題が発生した後、.NET Core 2.0コンソールプロジェクトを.NET Framework 4.6.1に戻すことにしました。
.NET Framework 4.6.1は、さまざまなソースによると、.NET Standard 2.0仕様を実装することになっています。特に、 dotnet/standard GitHub Repo 。
残念ながら、.NET Frameworkへの移行により、すべての.NET Frameworkコンソールプロジェクトで次のエラーが発生しました。
エラーCS0012型 'Object'は、参照されていないアセンブリで定義されています。アセンブリ 'netstandard、Version = 2.0.0.0、Culture = neutral、PublicKeyToken = cc7b13ffcd2ddd51'への参照を追加する必要があります。
Object
は何でも構いません:Enum
、Task
、...
このようなエラーを取得せずに、.NET Framework(4.6.1)で.NET Standard 2.0クラスライブラリを参照するにはどうすればよいですか?
最新の2.0およびVS 15.3を使用した後でも、この問題が発生しました。しかし、私の問題は異なっていたと思います。 Core 1.1から2.0にアップグレードした後、何らかの理由で、私の.webの.csprojには<RuntimeFrameworkVersion>1.1.2</RuntimeFrameworkVersion>
がありました。これにより、プロジェクトは正しい2.0バージョンをターゲットにできませんでした。
クラスライブラリ(.Layer)プロジェクトには<NetStandardImplicitPackageVersion>1.6.1</NetStandardImplicitPackageVersion>
がありました。
私は両方を削除し、私のプロジェクトはついに2.0の使用を開始し、その後すべてがうまくいきました。
以下のように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>
</system.web>
これによると GitHub issue 、同様の問題に対処するには、.NET Frameworkプロジェクト内のNETStandard.Library.NETFramework
パッケージへの参照を手動で追加する必要があります now *。
NuGetコンソール経由でインストールします。
Install-Package NETStandard.Library.NETFramework -Version 2.0.0-preview1-25305-02 -Pre
数日前、NET Core/Standard 2.0プレビュー2がリリースされました。更新する場合は、次のバージョンが必要です。
Install-Package NETStandard.Library.NETFramework -Version 2.0.0-preview2-25405-01 -Pre
または、NuGetストア経由で(プレリリースバージョンを表示)を確認し、NETStandard.Library.NETFramework
を検索します
これにより、参照が解決され、エラーが消えます。
* Joperezr は、Microsoftが後でツールでこれを処理することを計画していることを示しています。
現時点では、このパッケージへの参照を手動で追加する必要がありますが、これは迷惑になる可能性がありますが、今後はこれを行うツールを計画しています。
私のようにこの問題を抱えている人がいる場合に備えて
visual Studio 2017バージョンを> 15.3に更新します(ヘルプでバージョンを確認する->トップメニューから)、バージョン15.2があり、このエラーが表示されました。その後、Visual Studioのバージョンを更新し、修正しました。
Visual Studio 2017とC#UWPアプリを使用しています。このエラーが発生し、多くのクラスでプロジェクトでこのエラーが発生しました。ソリューションエクスプローラーでプロジェクトのReferencesフォルダーを右クリックし、[参照の追加]をクリックして修正しました。次に、ポップアップの下部にある[参照]ボタンを選択しました。
ファイルエクスプローラーに移動します。ここで適切なファイルが見つかります。
C:\ Program Files(x86)\ Microsoft Visual Studio\2017\Community\MSBuild\Microsoft\Microsoft.NET.Build.Extensions\net461\lib\netstandard.dllまたは.NET Core 2.0 SDKから見つけることができますC:\Program Files\dotnet\sdk\2.0.0\Microsoft\Microsoft.NET.Build.Extensions\net461\lib\netstandard.dll
追加すると、すべてのエラーがなくなりました。
プロジェクトをサブフォルダーに物理的に移動すると、NuGetパッケージ参照(パスヒント)が破損するため、この例外が自分で発生しました。 csprojファイルで修正すると、すべてが再び正常に戻りました。
Visual Studioの更新により多くの人が問題を解決したと聞いてうれしいです。ただし、バグやその他の問題があるため、.NET Framework 4.6.1プロジェクトから.NET Standard 2.0ライブラリを使用することはお勧めできません。可能であれば、代わりに4.7.2以降を使用する必要があります。
Immo Landwerth、Microsoftの.NETチームのプログラムマネージャー tweeted :
申し訳ありませんが、台無しになりました。 .NET Framework 4.6.1に遡って.NET Standard 2.0を実装しようとしました。タイムマシンがなく、バグの尾があるので、これは間違いでした。
.NET Frameworkから.NET Standard 1.5+を使用する場合は、4.7.2にすることをお勧めします。
。NET標準の比較可能マトリックス は、4.6.1の脚注で更新されました。
ここにリストされているバージョンは、特定の.NET標準ライブラリが適用可能かどうかを判断するためにNuGetが使用するルールを表しています。 NuGetは.NET Framework 4.6.1を.NET Standard 1.5〜2.0をサポートしていると見なしますが、.NET Framework 4.6.1プロジェクトからそれらのバージョン用にビルドされた.NET Standardライブラリを使用することにはいくつかの問題があります。このようなライブラリを使用する必要がある.NET Frameworkプロジェクトの場合、プロジェクトを.NET Framework 4.7.2以降をターゲットにアップグレードすることをお勧めします。
JenkinsなどのCI用MSBuildを使用している場合は、ビルドツールを更新します( https://www.visualstudio.com/downloads/#build-tools-for-visual-studio-2017から再度ダウンロードできます) )そして、「。NET Core build tools」がチェックされていることを確認してください。
TestServer
を使用してMVCビューをテストすると、テストプロジェクトでこの問題が発生しました。
テストプロジェクト、Webプロジェクト、および関連ライブラリはすべてnetcoreapp2.0
でした。
Vs2017を15.5にアップグレードしても機能せず、テスト用の.csprojを次の修正で編集しても機能しませんでした。
<RestoreProjectStyle>PackageReference</RestoreProjectStyle>
<ItemGroup><Reference Include="netstandard" /></ItemGroup>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
<GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType>
https://github.com/aspnet/Razor/issues/1212#issuecomment-297885722 に従って、これは機能しました:
<Target Name="CopyDepsFiles" AfterTargets="Build" Condition="'$(TargetFramework)'!=''">
<ItemGroup>
<DepsFilePaths Include="$([System.IO.Path]::ChangeExtension('%(_ResolvedProjectReferencePaths.FullPath)', '.deps.json'))" />
</ItemGroup>
<Copy SourceFiles="%(DepsFilePaths.FullPath)" DestinationFolder="$(OutputPath)" Condition="Exists('%(DepsFilePaths.FullPath)')" />
</Target>