如何在另一个解决方案中恢复自己的nuget包

时间:2017-12-07 04:58:05

标签: c# nuget visual-studio-2017

我的 C#解决方案名为commons,其中包含我的模型以及其他解决方案将使用的常见内容。

作为帖子构建活动我创建了一个 nuget 包并将其复制到我的本地 Nuget folder ("C:\packages")

发布后事件:

"$(ProjectDir)nuget.exe" pack "$(ProjectDir)Commons.csproj" - IncludeReferencedProjects

xcopy Commons.1.0.0.nupkg c:\packages /Y

  

注意:版本永远不会更改。

成功创建了我的新nuget包。

然后在另一个解决方案中我引用该包,我可以看到一切正常。 我可以访问我的所有模型和所有内容。

我遇到的问题是

如果我对我的Common项目进行任何更改(例如在我的模型中添加一个新字段),这将不会出现在我的解决方案中。

我错过了什么?

3 个答案:

答案 0 :(得分:0)

  • 使用比以前更高版本创建包
  • 将新包复制到共享文件夹
  • 确保该文件夹具有以下结构

    packageName/version/[packageName].[version].nupkg v1: abc.common/1.0.0/abc.common.1.0.0.nupkg v2: abc.common/2.0.0/abc.common.2.0.0.nupkg

  • 确保较新的软件包具有更高版本,不仅仅是文件夹结构,还有nuspec文件。您可以将.nupkg重命名为zip文件,并访问nuspec文件。或者使用package explorer https://github.com/NuGetPackageExplorer/NuGetPackageExplorer

  • 现在将包添加到共享文件夹,例如:\\ localhost \ mypackages并将此共享URL用作visual studio中的包源

如果发布了新版本,VS将自动显示升级按钮。

答案 1 :(得分:0)

  

如果我对我的Common项目进行任何更改(例如在我的模型中添加一个新字段),这将不会出现在我的解决方案中。

长篇故事。

要解决此问题,您应该在更改{{}后确保两点,重新打包重新安装重新打包到解决方案 1}}项目。

<强> 1。重新打包:

Commons项目进行一些更改后,您应该重新打包nuget包。对于您的情况,您应该重建Commons项目以生成新的nuget包。

此外,您是否需要更改版本号取决于您自己的要求,我们建议您在发布新的nuget包之前更改版本号。

要完成此操作,请在发布新版本nuget包之前修改Commons文件中的AssemblyVersion。例如,

AssemblyInfo.cs

构建之后,您将获得[assembly: AssemblyVersion("1.0.0.1")] 文件夹中的nuget包Commons.1.0.0.1.nupkg,您可以在复制命令中使用通配符bin将包复制到*:< / p>

c:\packages

如果您不想更改版本,则无需执行更多操作。

<强> 2。重新安装重新打包到解决方案:

重新打包nuget包后,您需要将旧的nuget包替换为包源中的新nuget包。

需要指出命令xcopy.exe /y "$(ProjectDir)$(OutDir)Commons.*.nupkg" "c:\packages" 重新安装新版本包。

因为当你使用这个命令重新安装nuget包时,nuget将检查packages文件夹是否存在包Update-Package Commons -reinstall,如果它存在, nuget将不会恢复nuget包,所以nuget将不要在包源中重新下载新版本包。所以Nuget仍然重新安装旧包。这就是你遇到问题的原因。

要解决此问题,您需要删除软件包文件夹中的软件包,然后执行重新安装命令以重新安装软件包。或者您可以先卸载软件包,然后重新安装。

还有一件事,如果你再使用不同版本的软件包,可以直接使用update package来安装新版本的软件包,不需要先注意删除软件包/卸载。

希望这很清楚。

答案 2 :(得分:0)

所以...在尝试了1000件事之后,我能够弄明白。

正确的命令是: nuget pack Commons.csproj -BasePath .\ -IncludeReferencedProjects

所以缺少基本路径基本上都是

其他人的

发布后活动

"$(ProjectDir)nuget.exe" pack "$(ProjectDir)Commons.csproj" -BasePath "$(ProjectDir)-IncludeReferencedProjects