使用本地Feed进行Nuget包还原

时间:2013-01-19 00:27:04

标签: nuget nuget-package

我正在努力让nuget包恢复工作在一个解决方案中,该解决方案正在常规,公共nuget供稿和位于共享网络驱动器上的本地供稿中寻找包。

我到目前为止尝试的是在解决方案上启用nuget包恢复,然后编辑Nuget.targets并更改PackageSources变量,但这似乎不起作用。这可能吗?

我的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="\\mynetworkshare\Development\NugetPackages" />
</ItemGroup>

我在构建时遇到的错误是“无法找到包'MyCustomPackage'的版本'1.0.0'。我已经验证了nupkg存在于\\mynetworkshare\Development\NugetPackages\MyCustomPackage.1.0.0.nupkg

3 个答案:

答案 0 :(得分:3)

对我来说,修复是bhuvak的答案,而且我不得不重命名一些包裹。

我一直在创建符号包(命名类似于MyCustomPackage.1.0.0.symbols.nupkg)并使用本地包feed文件夹中的符号包。但是,程序包还原似乎并没有找到它们。我必须重命名它们,删除文件名的.symbols部分。

在我这样做之后,包恢复效果很好。

答案 1 :(得分:2)

更新NuGet.targets中的源代码应该可行。 确保已在目标文件中明确添加了官方NuGet源和本地源。 你注意到了什么错误?

答案 2 :(得分:1)

我们和@evan有类似的问题。我们正在使用CreateNewNuGetPackageFromProjectAfterEachBuild包在TFS 2013构建服务器上创建我们的NuGet包。我们有一个基于共享的本地包源,并将构建输出中的nupkg文件复制到此共享。我们发现引用这些包的构建失败,因为NuGet包还原无法在本地源中找到包。

从构建服务器上的命令行运行NuGet,我们得到了奇怪的行为:

nuget.exe list <search-term-for-our-packages> -allversions

总是成功并列出我们的每个版本的包。但是,当我们转到失败的构建的\src文件夹并运行

nuget.exe restore .\oursolution.sln

我们总是得到:

Unable to find version '1.0.6.341' of package 'our.package.name'.

我尝试了各种各样的方法来解决这个问题,使用nuget.config并在nuget.exe版本之间进行交换,但修复只是与我们的nupkg文件的命名有关。默认情况下,CreateNewNuGetPackageFromProjectAfterEachBuild将其生成的nupkg命名为包ID以及构建配置和目标。 E.g。

our.package.name.1.0.6.341.Release.AnyCPU.nupkg

我们的包源nuget list中的此文件有效,但nuget restore失败。当我将包重命名为

our.package.name.1.0.6.341.nupkg

然后nuget listnuget restore按预期工作。

我们的修复只是修改CreateNewNuGetPackageFromProjectAfterEachBuild的配置文件,以防止它包括构建配置和目标。但为什么nuget restore依赖于包文件名,而nuget list却不依赖?