我正在努力让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
。
答案 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 list
和nuget restore
按预期工作。
我们的修复只是修改CreateNewNuGetPackageFromProjectAfterEachBuild
的配置文件,以防止它包括构建配置和目标。但为什么nuget restore
依赖于包文件名,而nuget list
却不依赖?