73

いくつかのコンテキスト:パッケージをコミットせずに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要素のfalsetrueに変更しようとしましたが、これは期待どおりに機能しませんでした(条件属性の有無にかかわらず)。

4

3 に答える 3

123

チェックしたばかり:nuget.targetsはmsbuildファイルです。そして、あなたは正しい道を進んでいました:

<DownloadNuGetExe Condition=" '$(DownloadNuGetExe)' == '' ">false</DownloadNuGetExe>

値をtrueに変更します。

<DownloadNuGetExe Condition=" '$(DownloadNuGetExe)' == '' ">true</DownloadNuGetExe>

ただし、有効にするには、この後にVisual Studioを再起動するか、ソリューションを再読み込みする必要があります(コメントを参照)

于 2012-08-19T10:14:51.640 に答える
12

そのファイルを見ると、チェックインしたくない場合や毎回ダウンロードし.targetsたくない場合に、これを行う別の方法があります。NuGet.exeキーラインはこれです:

<NuGetExePath Condition=" '$(NuGetExePath)' == '' ">$(NuGetToolsPath)\nuget.exe</NuGetExePath>

プロパティがまだ定義されていない場合にのみプロパティを設定するというMSBuildの規則に従い、この値はデフォルトでソリューションのローカルコピーのになり、プロパティがNuGet.exeの場合はダウンロードされます。ただし、MSBuildプロパティは、環境変数によってオーバーライドできます。DownloadNuGetExetrue

すでにNuGetを中央の場所にダウンロードしている場合は、にとどまって、DownloadNuGetExe代わりに使用されるfalseと呼ばれる環境変数を定義できます。NUGETEXEPATH

于 2012-11-22T12:46:13.610 に答える
0

NuGetパッケージの復元を有効にする ここに画像の説明を入力してください

ソリューションを右クリックし、[ NuGetパッケージの復元を有効にする]を選択します

于 2015-10-13T13:19:10.377 に答える