NuGet の NuGet.targets ファイルを使用して NuGet.exe を自動的にダウンロードし、プロジェクトでパケットを復元しています。
これはうまく機能していましたが、職場ではプロキシがあり、(407) Proxy Authentication Required Exception が原因でこのメソッドが失敗していました。プロキシの詳細を使用するようにターゲット ファイルを変更しました。この方法はアプリケーションでは機能しますが、MSBuild タスクでは機能しませんが、コードは同じです。
プロキシとログインの詳細をハードコーディングすると、ソリューションをビルドすると NuGet.exe がダウンロードされ、パッケージが正しく復元されます。問題は MSBuild タスクでの認証にあるように見えますが、その理由はまったくわかりません。修正したコードを添付しました。
誰かが助けることができれば、私はそれを感謝します. ありがとう
<UsingTask TaskName="DownloadNuGet" TaskFactory="CodeTaskFactory" AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v4.0.dll">
<ParameterGroup>
<OutputFilename ParameterType="System.String" Required="true" />
</ParameterGroup>
<Task>
<Reference Include="System.Core" />
<Using Namespace="System" />
<Using Namespace="System.IO" />
<Using Namespace="System.Net" />
<Using Namespace="Microsoft.Build.Framework" />
<Using Namespace="Microsoft.Build.Utilities" />
<Code Type="Fragment" Language="cs">
<![CDATA[
try
{
OutputFilename = Path.GetFullPath(OutputFilename);
Log.LogMessage("Downloading latest version of NuGet.exe...");
using(WebClient webClient = new WebClient())
{
webClient.UseDefaultCredentials = true;
webClient.Proxy = WebRequest.GetSystemWebProxy();
webClient.Proxy.Credentials = CredentialCache.DefaultNetworkCredentials;
webClient.DownloadFile("https://www.nuget.org/nuget.exe", OutputFilename);
return true;
}
}
catch (Exception ex)
{
Log.LogErrorFromException(ex);
return false;
}
]]>
</Code>
</Task>
</UsingTask>