いくつかのコンテキスト:パッケージをコミットせずにNuGetを使用
するチュートリアルに従い、成功しました。手動で追加してこのNuGetの問題を回避した後、nuget.targetsファイルの場合は機能していました。<RestorePackages>
<Import ...>
ただし、Mercurialを使用してリポジトリのクローンを作成すると、ビルド時に次のエラーが発生しました。
'C:\ ... \ Visual Studio 2010 \ Projects \ MyProject \ .nuget\nuget.exe'が見つかりません
私の無視パターンがexeファイルをチェックインするのを妨げたので、これは理にかなっています。この関連するSOの質問から、このファイルをバージョン管理に含めることは珍しいことではないと推測しました(またはそうですか?)が、実際には、NuGet.exeをバージョン管理にコミットしたくないと思います。
質問: NuGet.exeをチェックインする必要をなくす便利な方法はありますか?
私はいくつかのGoogle-fuを試し、ドキュメントをざっと読み、NuGet.targetsファイルをいじりましたが、今のところ運がありません。ソリューションを構築している特定の環境のNuGet.exeを動的に指すことができれば望ましいようです。
exeファイルを追加するだけでよいことはわかっていますが、これを処理する他の方法があるかどうか、または実行可能な代替手段がない理由を知りたいと思います。
更新:
nuget.targetsファイルはいくつかの関連するxmlを保持しています:
<!-- only (relevant) parts of the xml shown below -->
<DownloadNuGetExe Condition=" '$(DownloadNuGetExe)' == '' ">false</DownloadNuGetExe>
...
<UsingTask TaskName="DownloadNuGet" TaskFactory="CodeTaskFactory" AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v4.0.dll">
<Task>
<Code Type="Fragment" Language="cs">
<![CDATA[
try {
OutputFilename = Path.GetFullPath(OutputFilename);
Log.LogMessage("Downloading latest version of NuGet.exe...");
WebClient webClient = new WebClient();
webClient.DownloadFile("https://nuget.org/nuget.exe", OutputFilename);
return true;
}
catch (Exception ex) {
Log.LogErrorFromException(ex);
return false;
}
]]>
</Code>
</task>
</UsingTask>
.targetsファイルの動作に慣れていませんが、これは私が探しているものに沿っているようです。カウボーイコーディングハットを付けた状態で、DownloadNuGetExe要素のfalse
をtrue
に変更しようとしましたが、これは期待どおりに機能しませんでした(条件属性の有無にかかわらず)。