Nuget Package Managerを使用してVS 2017にMicrosoft.Net.Compilers.1.0.0
をインストール/復元しようとしています。出力では、復元が完了したことが示されています。ただし、packages
フォルダーをチェックすると、Microsoft.Net.Compilers
フォルダーが表示されません。そのため、エラーが発生します
重大度コード説明プロジェクトファイル行抑制状態エラーこのプロジェクトは、このコンピューターにないNuGetパッケージを参照しています。 NuGet Package Restoreを使用してダウンロードします。詳細については、 http://go.Microsoft.com/fwlink/?LinkID=322105 を参照してください。不足しているファイルは....\packages\Microsoft.Net.Compilers.1.0.0\build\Microsoft.Net.Compilers.propsです。 XXXXX\Src\Api\Api.csproj 296
Csprojファイルでは、一番上に行があります
<Import Project="..\..\packages\Microsoft.Net.Compilers.1.0.0\build\Microsoft.Net.Compilers.props" Condition="Exists('..\..\packages\Microsoft.Net.Compilers.1.0.0\build\Microsoft.Net.Compilers.props')" />
背景
この問題は、ターゲットフレームワーク4.6.2を使用するWeb APIプロジェクトで発生しています。また、さまざまな種類の.NETアプリケーションと共有するNET Standard 1.4
ライブラリもあります。 NET Standard Library
の参照をWeb APIプロジェクトに追加すると、 依存関係の問題がありません になります。したがって、提案に従って、.csprojファイルを編集して追加しました
<RestoreProjectStyle>PackageReference</RestoreProjectStyle>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
これにより、依存関係の欠落の問題が修正されました。
次に、package.config
ファイルを削除し、packages
フォルダーからすべてのパッケージを削除し、すべてのパッケージを追加し直しました(Microsoft.Net.Compilersを追加できなかった場合を除く)。パッケージ参照は現在.csprojファイルにあります
そこに [〜#〜] so [〜#〜] ここに投稿しますが、私の場合、Microsoft.Net.Compilers
はpackages
フォルダーに復元されません。 VS 2017は復元が完了したことを示していますが、実際にファイルをコピーしている場所はわかりません。 (フォルダー名がMicrosoft.Net.Compilersと異なる場合を除く)
私の元のpackage.configファイルにはこの行があります
<package id="Microsoft.Net.Compilers" version="1.0.0" targetFramework="net462" developmentDependency="true" />
今.csprojファイルに私が持っています
<PackageReference Include="Microsoft.Net.Compilers">
<Version>1.0.0</Version>
</PackageReference>
更新1
したがって、packagereferenceを有効にすると、nugetはC:\Users\{username}\.nuget\packages
フォルダーにパッケージをインストールします
つまり、csprojファイルを正しい相対パスで更新する必要があります。
パッケージフォルダーの相対パスは何ですか?
Package Management FormatをPackageReferenceに設定すると、パッケージがC:\Users\{username}\.nuget\packages
であるグローバルnugerフォルダーにインストールされるため、csprojファイルを編集する必要があり、次の行を更新します
csprojの上部
<Import Project="$(UserProfile)\.nuget\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform\1.0.7\build\net45\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props" Condition="Exists('$(UserProfile)\.nuget\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform\1.0.7\build\net45\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props')" />
<Import Project="$(UserProfile)\.nuget\packages\Microsoft.Net.Compilers\2.1.0\build\Microsoft.Net.Compilers.props" Condition="Exists('..\packages\Microsoft.Net.Compilers.2.1.0\build\Microsoft.Net.Compilers.props')" />
そして、csprojの下部にある次の行を更新します
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
<PropertyGroup>
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.Microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
</PropertyGroup>
<Error Condition="!Exists('$(UserProfile)\.nuget\packages\Microsoft.Net.Compilers\2.1.0\build\Microsoft.Net.Compilers.props')" Text="$([System.String]::Format('$(ErrorText)', '$(UserProfile)\.nuget\packages\Microsoft.Net.Compilers\2.1.0\build\Microsoft.Net.Compilers.props'))" />
<Error Condition="!Exists('$(UserProfile)\.nuget\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform\1.0.7\build\net45\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props')" Text="$([System.String]::Format('$(ErrorText)', '$(UserProfile)\.nuget\packages\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform\1.0.7\build\net45\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props'))" />
</Target>
これらはすべて、NET Standard 1.4
プロジェクトを.NET 4.6.2に参照するためのものです。とてもうるさい!!
私の場合、完全なslnを含まないGitHubからプロジェクトをダウンロードしましたが、同じレベルの.csprojとpackagesフォルダーを持つ単一のフォルダーでした。
この場合、.csprojファイルの「..\packages \」を「。\ packages \」に置き換えるだけで済みました。 GitHubリポジトリの所有者がプロジェクトフォルダーのみをアップロードすることを決定したが、アップロードする前にテストするために再コンパイルしなかったと思われます。
@ LP13の答えは正しい方向を示してくれました。私は別のことをしなければならなかったけれども。
私の.csprojファイルには、Microsoft.Net.Compliersへの2つの参照があります。 2.9.0(現在使用しているもの)と1.2.1(古いバージョン)用です。
ファイルの先頭で、参照した2つのImport Project行をコメントアウトしました。
Import Project = "。\ packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.1 ...
Import Project = "。\ packages\Microsoft.Net.Compilers.1.2.1 ...
ファイルの下部で、同じrefrencesのエラー条件エントリで同じことを行います。