web-dev-qa-db-ja.com

Visual Studio 2017で.NET Framework 4.5コンソールアプリケーションから.NET標準ライブラリを参照するにはどうすればよいですか?

最終的にVisual Studio 2017.2をインストールし、最初のプロジェクトを機能させようとしていますが、ここで対処したい問題に直面しています。

次のプロジェクトファイルとして記述されている非常に単純な.NET標準ライブラリがあります。

_<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>netstandard1.6</TargetFramework>
  </PropertyGroup>

</Project>
_

また、上記の.NET標準ライブラリを参照する非常にシンプルな.NET Frameworkコンソールアプリケーションであり、次のプロジェクトファイルとして記述されています。

_<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net45</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <ProjectReference Include="..\Common\Common.csproj" />
  </ItemGroup>

</Project>
_

コンソールアプリケーションをビルドすると、次のビルドエラーが発生します。

C:\Program Files\dotnet\sdk\1.0.4\NuGet.targets(97,5): error : Project Common is not compatible with net45 (.NETFramework,Version=v4.5). Project Common supports: netstandard1.6 (.NETStandard,Version=v1.6)

この質問 を見て、そこで提供された提案をいくつか試しましたが、どれも機能しませんでした。したがって、これは別の問題のようです。これは、ソリューションのビルド中に発生し、NuGetパッケージを(明示的に)参照することはありません。

最後に、それが役立つ場合、ここでこの問題を実証するソリューションがあります: https://github.com/Mike-EEE/Stash/blob/master/VS2017.Multi/VS2017.dotNetFramework.sln

26
Mike-EEE

.NET Framework 4.5は、.NET Standard 1.0または1.1を対象とする.net標準ライブラリの使用のみをサポートしています。ライブラリは1.6を対象としているため、ツールはここで正しいことを行い、エラーを出力します(ライブラリは.NET Framework 4.5では利用できないAPIを使用する可能性があるため)。ライブラリをNuGetパッケージとして公開し、パッケージ参照を介して使用すると、パッケージの復元もエラーになります(パッケージに互換性がないというエラーが表示されます)。

これらのバージョンを変更するプレビューツール(「2.0」)があるため、.NET Frameworkバージョンがどの.NET Standardバージョンをサポートするかについて、いくつかの混乱があります。 ドキュメントの「.NETプラットフォームサポート」表 には、サポートされているバージョンに関する2行が含まれています。ただし、どちらのバージョンでも、.NET Framework 4.5は.NET Standard 1.1に制限されています。

31
Martin Ullrich

.netフレームワークプロジェクトが.net標準ライブラリと互換性を持つためには、NETStandard.Library nugetから。
今、私はこれが絶対に必要な理由を正確に述べている公式のリソースを見つけることができませんが、私はNETStandard.Libraryには、.NET標準APIから.NET Frameworkへのマップを作成するために必要なリンクがあります。
詳細情報が必要な場合は、 NET Standard の公式ドキュメントを読むことをお勧めします。

4