我是一个项目的开发人员,即使我们不使用.Net,我们也会将nuget用作包装技术,因为......好吧......因为它有一个问题。我们的许多盒子(即包装为单个工件,版本控制,内部nuget服务器用于分发)。在实践中,我们大量使用<files>
element in our .nuspec files来打包可重用的代码工件,然后在需要它们的任何地方使用。
在我们使用.nupkg包的每个代码库中,我们有一个Visual Studio解决方案(.sln文件),它只包含一个packages.config文件,该解决方案包含零个项目。
这很有效,除了一件事,我们有一个拒绝更新的.nupkg(dh.PSP.SSE.Engine)。每次我们尝试更新包时,它都会失败:
Update-Package : 'dh.PSP.SSE.Engine' was not installed in any project. Update failed
install-package工作正常:
这是dh.PSP.SSE.Engine.nuspec:
<?xml version="1.0"?>
<package >
<metadata>
<id>dh.PSP.SSE.Engine</id>
<version>1.0.0</version>
<authors>dunnhumby</authors>
<owners>dunnhumby</owners>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<summary>Strategic Scoring Engine - Engine</summary>
<description>Strategic Scoring Engine - Engine</description>
<releaseNotes/>
<copyright>Copyright 2014</copyright>
</metadata>
<files>
<file src="fs\**" />
<file src="Cronacle\**" target="Cronacle" exclude="Cronacle\Cronacle.car;Cronacle\com\**;Cronacle\META-INF\**" />
<file src="VersionNumberStamp.txt" target="VersionNumberStamp_dh.PSP.SSE.Engine.txt" />
<file src="packages\dh.PSP.SSE.Ape.*\*.jar" target="lib" />
<file src="packages\dh.PSP.SSE.Chimp.*\programs\*.py" target="lib" />
</files>
</package>
我们不知道为什么会这样。我们有一个理论认为,我们在解决方案层面而不是项目层面使用nuget这一事实可能是一个问题,但是说,我不认为我们正在做任何不能做的事情。 ; t为...而设计。此外,我们还有许多其他软件包(&gt; 10),所有这些软件包都可以更新。
这有点推测,但有人提出任何建议,说明为什么这不起作用或我们可以做些什么来进一步调查。我们有点死路一条。
答案 0 :(得分:1)
取自https://docs.nuget.org/consume/nuget-faq
使用包 项目级包和解决方案级包之间有什么区别?
解决方案级别的软件包只能在解决方案中安装一次,以便解决方案中的所有项目都可用。必须在要使用它的每个项目中单独安装项目级包。对于解决方案级别的包,NuGet不会更改项目中的任何内容,而在项目级别的包中则会更改。通常,解决方案级别的软件包会安装可在Package Manager控制台窗口中调用的新命令。
答案 1 :(得分:0)
感谢@ lloyd-holman,我想到了这一点。我的.nupkg有一个&#34; lib&#34;文件夹让Nuget Package Manager认为它是一个项目级的nuget包。因此,它无法将其更新为解决方案级别的nuget包。