Visual Studio 2017をインストールしました。新しい.NET Standard形式のクラスライブラリがあります(.NET Frameworkと.NET Coreの両方を表示できます)。しかし、「追加」-「参照」、「アセンブリ」、「フレームワーク」の順に移動すると、長時間スピンし、「マシン上でフレームワークアセンブリが見つかりませんでした」と表示されます。 (このマシンにはVS 2015がインストールされており、.NET 4.6.1と同様に正常に動作しています。)これを解決するにはどうすればよいですか?
ETA:現在、私の.csprojファイルは次のようになっています。
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFrameworks>net461;netstandard2.0</TargetFrameworks>
</PropertyGroup>
<ItemGroup>
<Compile Remove="Utility\EncryptionUtility.cs" />
</ItemGroup>
<ItemGroup>
<Folder Include="Utility\" />
</ItemGroup>
<ItemGroup>
<Reference Include="System.Runtime.Caching" />
</ItemGroup>
</Project>
からの変更
<TargetFramework>netstandard2.0</TargetFramework>
に
<TargetFrameworks>net461;netstandard2.0</TargetFrameworks>
最終的にSystem.Runtime.Caching
への参照を追加できますが、参照を展開するときにIDEに黄色の警告アイコンが表示され、.NET 4.6.1とStandardの両方に含まれます折りたたみ可能なセクション(標準には警告アイコンも表示されます)IDEは参照がまだ存在しないと主張するため、ビルドは失敗します。
.NET Frameworkと.NET Core/.NET Standardの両方をマルチターゲティングする場合、ほぼ確実に MSBuild条件 を使用して.NET Framework参照を防止する必要があります。 .NET Core/.NET Standardへの移行。
MSBuildの条件はかなり前から存在していましたが、Visual Studioでそれらを追加することはサポートされていません。手動で.csproj
ファイル。
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFrameworks>net461;netstandard2.0</TargetFrameworks>
</PropertyGroup>
<ItemGroup>
<Compile Remove="Utility\EncryptionUtility.cs" />
</ItemGroup>
<ItemGroup>
<Folder Include="Utility\" />
</ItemGroup>
<ItemGroup Condition=" '$(TargetFramework)' == 'net461' ">
<Reference Include="System.Runtime.Caching" />
</ItemGroup>
</Project>
また、一度これを行うと、Visual Studioを使用してNuGetまたはその他のアセンブリ参照を追加しても正しく動作するという保証はないことに注意してください。
.csproj
ファイルを使用して、参照が正しい条件付きセクションに追加されるようにします。毎回ファイルを手動で編集して、参照を追加する方が良いでしょう。
私の側では、以前に提示したすべてのソリューションを試しましたが、ソリューションはMicrosoft.CSharpのNuGetパッケージをインストールするだけでした。
インストール後、プロジェクトをクリーンアップしてIDEを再起動します。
.csproj内のTargetFrameworksの順序を変更してみてください。
から
<TargetFrameworks>netstandard2.0;net461</TargetFrameworks>
に
<TargetFrameworks>net461;netstandard2.0</TargetFrameworks>
これは、4.7.2のみが存在する新規インストールPCで4.7.1を対象としたソリューションを開いたときに起こりました。