2013-07-18 5 views
10

UbuntuでMonoを使用してC#アプリケーションでコンパイルしようとしています。私は私のgitリポジトリにnuget.exeを含める必要性を防ぐためにしようとしています。これは、私がアプリケーションを構築するとき、私は、Visual Studio 2010を使用していた場合、nuget.exeが期待通りにダウンロードされる作品this questionタスクを初期化中にエラーが発生しました。DownloadNuGet:Not registered task DownloadNuGet

に受け入れ答えに従っています。

ただし、monoとxbuildを使用しようとすると、次のエラーが表示されます。その行は次のようになりますので、

Target Build: 
    Project "/home/builduser/SpecialBuildProj/BuildTrade/BuildTrade.csproj" (default target(s)): 
    Target CheckPrerequisites: 
     Project "/home/builduser/SpecialBuildProj/.nuget/NuGet.targets" (_DownloadNuGet target(s)): 
      Target _DownloadNuGet: 
: error : Error initializing task DownloadNuGet: Not registered task DownloadNuGet. 
      Task "DownloadNuGet" execution -- FAILED 
      Done building target "_DownloadNuGet" in project "/home/builduser/SpecialBuildProj/.nuget/NuGet.targets".-- FAILED 
     Done building project "/home/builduser/SpecialBuildProj/.nuget/NuGet.targets".-- FAILED 
    Task "MsBuild" execution -- FAILED 
    Done building target "CheckPrerequisites" in project "/home/builduser/SpecialBuildProj/BuildTrade/BuildTrade.csproj".-- FAILED 
    Done building project "/home/builduser/SpecialBuildProj/BuildTrade/BuildTrade.csproj".-- FAILED 
Task "MSBuild" execution -- FAILED 
Done building target "Build" in project "/home/builduser/SpecialBuildProj/SpecialBuildProj.sln".-- FAILED 
Done building project "/home/builduser/SpecialBuildProj/SpecialBuildProj.sln".-- FAILED 

私が変更した唯一のものは、nuget.targets中= trueDownloadNuGetExeを設定されています

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

私の質問: 私はそれを設定することができますどのようにmono/xbuildを使用した動作は、Visual Studioを使用する場合と同じです(つまり、そのナゲットは自動的にダウンロードされます)。

編集 これはNuGet.targetsファイルに表示さUsingTaskラインです。

<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..."); 
       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> 

答えて

8

ダウンロードするスクリプトを作成します。例えば。

wget http://nuget.org/nuget.exe 
cp nuget.exe ./.nuget/NuGet.exe 
chmod a+x ./.nuget/NuGet.exe 

これは、NuGet.exeを最新の状態に保ちます。 Source

+2

NuGet.exeを手動でダウンロードすると、xbuildでNuGetを使用する際に手早く手を加えることができました。すぐ次の問題は、NuGet.exeが信頼できない証明書のためにパッケージをダウンロードできなかったことです。解決策はここにあります:http://stackoverflow.com/questions/15181888/nuget-on-linux-error-getting-response-stream – vvnurmi

0

これは、Xamarin Studio for BusinessとMacOSでは今でも問題が続いています。 Facebook SDKをビルドしようとしているときにこのエラーが発生しました。プロジェクトをビルドするには、プロジェクトファイルのNuGetターゲット参照を削除する必要がありました。 Xamarin StudioにはNuGetアップデートが組み込まれているので、パッケージを手動でダウンロードすることができました。

関連する問題