0

我正在寻找为 MSBuild C# api 编写一个包装器。我的构建工作正常,但出于某种奇怪的原因,即使我传入参数,我也很难让 Nuget 包恢复运行。

我在作为NETWORK SERVICE运行的服务中运行它

The command ""..\.nuget\nuget.exe" install "C:\BuildTemp\application1\packages.config" -source "" -RequireConsent -o "..\packages"" exited with code 1.

我是否正确传递了它们?

var pc = new ProjectCollection();
var buildProperties = new Dictionary<string, string>
{
    {"Configuration", "Release"},
    {"Platform", "Any CPU"},
    {"OutputPath", _outputPath},
    {"EnableNuGetPackageRestore", "true"}
};

var buildParameters = new BuildParameters(pc);
var buildRequest = new BuildRequestData("C:\myapplication.csproj",
                                        buildProperties,
                                        null,
                                        new[] { "Clean", "Rebuild" },
                                        null);

更新:这似乎适用于某些环境而不是其他环境。为什么会这样?

4

1 回答 1

3

所以我在本地机器上测试了这个命令:

.\.nuget\NuGet.exe install Akavache\packages.config -source "" -RequireConsent -o packages

我得到一个错误:

无效的 URI:无法确定 URI 的格式。

我认为这与这一点有关:

-source ""

因为我可以删除该值并让它再次运行而不会出现错误。

这就引出了一个问题,包源在哪里定义?

NuGet.targets 文件中有这样的部分:

<ItemGroup Condition=" '$(PackageSources)' == '' ">
    <!-- Package sources used to restore packages. By default, registered sources under %APPDATA%\NuGet\NuGet.Config will be used -->
    <!-- The official NuGet package source (https://nuget.org/api/v2/) will be excluded if package sources are specified and it does not appear in the list -->
    <!--
        <PackageSource Include="https://nuget.org/api/v2/" />
        <PackageSource Include="https://my-nuget-source/nuget/" />
    -->
</ItemGroup>

因此,我建议当您说它“在某些环境中而不是在其他环境中”工作时,您没有%APPDATA%\NuGet\NuGet.Config服务帐户的配置文件。

您可以尝试将Nuget.targets源代码管理中文件中的此部分更改为:

<ItemGroup Condition=" '$(PackageSources)' == '' ">
    <PackageSource Include="https://nuget.org/api/v2/" />
</ItemGroup>

看看这是否能解决您在其他环境中的问题?

于 2013-03-27T02:18:41.697 回答