。net 4.6.2から4.7.1に移動した.netフルフレームワークWPFアプリケーションがあり、PackageReferencepackages.configではなくcsprojファイル内。
開発マシンでのビルドは問題ないように見え、パッケージがダウンロードされて復元されますが、Windows Server 2012ビルドサーバーでJenkinsをビルドすると、nugetパッケージは正しく復元されます。
MSBuild v15.5と最新の "msbuild/restore"コマンドを使用して、ビルド時にパッケージを復元しています。注:「nuget restore」を呼び出す以前の方法を使用するとdoesは機能しますが、 msbuild/restore now を使用できるはずです。
パッケージの復元プロセスは正しいNuGetサーバーを見ているようで、エラーなしで復元を実行しているようです(これは、問題を特定するためにJenkinsでコンパイルされたテストソリューションです)。
Restore:
Restoring packages for c:\Jenkins\workspace\Test\ConsoleApp1\ConsoleApp1.csproj...
Committing restore...
Generating MSBuild file c:\Jenkins\workspace\Test\ConsoleApp1\obj\ConsoleApp1.csproj.nuget.g.props.
Generating MSBuild file c:\Jenkins\workspace\Test\ConsoleApp1\obj\ConsoleApp1.csproj.nuget.g.targets.
Writing lock file to disk. Path: c:\Jenkins\workspace\Test\ConsoleApp1\obj\project.assets.json
Restore completed in 577.05 ms for c:\Jenkins\workspace\Test\ConsoleApp1\ConsoleApp1.csproj.
NuGet Config files used:
c:\Jenkins\workspace\Test\NuGet.Config
C:\Windows\system32\config\systemprofile\AppData\Roaming\NuGet\NuGet.Config
Feeds used:
http://devbuild/NuGetHost/nuget
https://api.nuget.org/v3/index.json
Done Building Project "c:\Jenkins\workspace\Test\ConsoleApp1.sln" (Restore target(s)).
ただし、msbuildがコードをコンパイルすると、NuGetがダウンロードされていないように見える次のエラーが表示されます。
CSC : error CS0006: Metadata file 'C:\Windows\system32\config\systemprofile\.nuget\packages\log4net\2.0.8\lib\net45-full\log4net.dll'
could not be found [c:\Jenkins\workspace\Test\ConsoleApp1\ConsoleApp1.csproj]
Nugetパッケージが復元されない理由は何ですか?
NuGetの問題の投稿を何時間も検索および選別し、.netコアノイズを除去した後、修正しました!
いくつかの NuGet およびmsbuild msbuild によると、Windows Server 2012のローカルシステムアカウントでNuGet(またはmsbuild/restore)を使用して復元する場合、NuGetが使用するフォルダーは「ではありません」アクセス可能であるか、実行中の32ビットと64ビットのプロセスが原因で異なるフォルダーであるため、そのローカルキャッシュフォルダーにナゲットをダウンロードできません。
Msbuildがコンパイル時に参照したいこのフォルダーは、C:\ Windows\system32\config\systemprofile\.nuget\packagesのようです。
私たちの解決策は、システム全体の環境変数NUGET_PACKAGESを使用してNuGetパッケージキャッシュフォルダーをC:\ NugetPackageCacheなどのアクセス可能な別のフォルダーに設定することでした。
NUGET_PACKAGES=C:\NugetPackageCache
また、Build Environment-> Inject環境変数をbuild process-> PropertiesContentに設定することにより、Jenkinsプロジェクトごとにこれを設定できます:
NUGET_PACKAGES=C:/NugetPackageCache
これによる別の潜在的な解決法 NuGet issue post は、msbuildがnugetsを探しているフォルダーに環境変数を設定することです。
NUGET_PACKAGES=C:\Windows\system32\config\systemprofile\.nuget\packages
注:環境変数はNuGetで優先されます。 NuGet docs を 優先順位に言及 に更新したようには見えません。
注:環境変数を注入/設定するには、次のような EnvInject Jenkinsプラグインを使用します。
.NET Frameworkプロジェクトの状況は非常に似ていますが、わずかに異なり、最近4.7.2に変換し、<PackageReference>
ではなくpackages.config
を使用して、サービスが実行されるWindowsベースのJenkinsサーバー上に構築しましたローカルシステムとして。私たちのケースでは、nuget restore
は単にnotプライベートMyGetフィードを見て、その結果、独自のパッケージをインストールしていないことがわかりましたそのソースは、ビルドに失敗しました。 nuget restore
コマンドに続く「使用フィード」リストに表示されていませんでした。
mips ここから回答(およびそこからリンクされたNuGetの問題)に触発され、C:\Windows\system32\config\systemprofile\AppData\Roaming\NuGet\NuGet.config
を構成ソースとしてリストしているにもかかわらず(実際にMyGetフィードであった)設定されました)、実際にはC:\Windows\SysWOW64\config\systemprofile\AppData\Roaming\NuGet\NuGet.config
を代わりに使用していました。 system32の場所からSysWOW64の場所にNuGet.configファイルをコピーすることで問題を解決できました。
NUGET_PACKAGES環境変数を設定および挿入する必要はありませんでした。