我尝试从.NET 4.7.2类库(VS 2017)中创建一个NuGet包,但结果NuGet包令人惊讶地显示没有依赖项(这是一个错误)。
我的设置是这样的:
- 我的类库是.NET Framework 4.7.2
- 我的类库使用了 * 另一个 * NuGet包(它有 * 依赖项)。
- 我的类库在.csproj中使用 packageReferences
- 我的类库包含一个适当的.nuspec文件
- 我使用 *nuget. exepack * 来创建包
- nuget.exe pack* 命令应该 * 自动 * 填充所需的依赖项-这也是以前的情况(在另一个项目中)。然而,在那个时候,我使用 packages.config 而不是我的类库中的 packageReferences。这会改变什么吗
这是怎么回事?
如何强制系统再次在我的包中包含所需的依赖项?
备注:
- 该软件包由TeamCity构建服务器上的MSBuild脚本构建(没有VS 2017)。这是一个构建脚本,它调用 “nuget.exe restore” 和更高版本的 “nuget.exe pack” 作为其构建逻辑的一部分。
- MSBuild版本15.7
- nuget.exe版本为4.6.2
2条答案
按热度按时间lztngnrs1#
我怎样才能强制系统再次在我的包中包含所需的依赖项?
这是一个关于nuget pack的已知问题,即在使用PackageReference而不是packages.exe时忽略依赖项。
要解决此问题,您可以使用该链接中的解决方法:引用
NuGet.Build.Tasks.Pack
并使用msbuild -t:pack
打包它。NuGet团队仍在积极努力改善这种情况。我已经测试了这个解决方法,它工作得很好。但是,msbuild命令需要更多的细节。
NuGet.Build.Tasks.Pack
添加到项目中,如GitHub issue中所述。msbuild.exe /t:pack
。如果没有Authors
属性,NuGet将出错,您可能希望将输出目录设置为默认目录以外的其他目录:但是,如果你想使用
.nuspec
文件来创建nuget包,你应该使用下面的.nuspec
文件:然后我们可以使用
nuget.exe pack
来创建nuget包。但是,使用这种方法,我们必须在.nuspec
文件中手动填写所需的依赖项。yvgpqqbh2#
我得到了同样的问题,并使用第二种方式刘少奇提到与帕特里克的脚本和一些小的修改,以克服这个问题。以下是步骤:
![](https://i.stack.imgur.com/jkH9M.png)
1.复制或下载下面的powershell脚本,将其命名为NuGetPackaddencies.ps1并将其添加到您的解决方案中(因为我希望在此解决方案中的许多项目中重用相同的脚本)
1.配置生成后事件
1.像以前一样生成和发布项目。