安装包成功,更新包总是失败。为什么?

Install-package succeeds, Update-Package always fails. Why?

我是一个项目的首席开发人员,在这个项目中,即使我们没有使用 .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

安装包工作正常:

这里是 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 的事实可能是一个问题,但也就是说,我不认为我们正在做任何不是 nuget 设计的。此外,我们还有许多其他软件包 (>10),所有更新都很好。

这有点推测性,但对于为什么这不起作用或我们可以做些什么来进一步调查,有没有人有任何建议。我们有点死胡同了。

Jamie,你可以添加 .nuspec 文件的内容吗,它可能是 NuGet 解决方案和项目级包格式之间的微妙之处,也许它最近发生了变化?

取自https://docs.nuget.org/consume/nuget-faq

使用包 项目级包和解决方案级包有什么区别?

A solution-level package has to be installed only once in a solution to be available for all projects in the solution. A project-level package must be installed separately in each project where you want to use it. For solution-level packages, NuGet doesn't change anything in a project, whereas in a project-level package it does. Typically, a solution-level package installs new commands that can be called from within the Package Manager Console window.

感谢@lloyd-holman,我解决了这个问题。我的 .nupkg 有一个 "lib" 文件夹,所以 Nuget 包管理器认为它是一个项目级的 nuget 包。因此它无法将其更新为解决方案级别的 nuget 包。