初始化任务时出错DownloadNuGet:未注册任务DownloadNuGet

时间:2013-07-18 05:22:15

标签: visual-studio-2010 mono nuget xbuild

我试图在Ubuntu上使用Mono通过C#应用程序进行编译。我试图阻止在我的git存储库中包含nuget.exe并在this question

中遵循接受的答案

如果我使用的是Visual Studio 2010,则此方法有效。构建应用程序时,将按预期下载nuget.exe。

但是,当我尝试使用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

我唯一改变的是在DownloadNuGetExe中设置true = nuget.targets,以便该行看起来像这样:

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

我的问题: 如何设置它以便使用mono / xbuild的行为与使用Visual Studio时相同(即,自动下载nuget)?

修改 这是UsingTask文件中显示的NuGet.targets行。

<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>

2 个答案:

答案 0 :(得分:8)

创建一个脚本来下载它。 E.g。

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

这可以使您的NuGet.exe保持最新状态。 Source

答案 1 :(得分:0)

今天,Xamarin Studio for Business和MacOS仍然存在问题。我在尝试构建Facebook SDK时遇到了这个错误。我不得不删除项目文件中的NuGet目标引用以构建项目。 Xamarin Studio内置了NuGet更新,因此我可以手动下载软件包。