.Net Core 2.0“在构建时生成 Nuget 包”问题以及构建后事件

2024-02-15

The new .NET Core 2.0 projects provide and easy and convenient way to create Nuget Package from the project output. Just click on the "Generate Nuget package on build" check box and it is done. enter image description here It works fine but I have an issue with Post-build events. I want to copy all of the packages from a solution after each build to a specific folder. So I use the "Post-build event command line" with a script:

xcopy "$(ProjectDir)$(OutDir)..*.nupkg" "$(SolutionDir)..\WebServicePracticesNuget\" /Y /I

有时它工作得很好,有时却根本不起作用。到目前为止,我的调查得出的结论是,Nuget 包的创建不是构建过程本身的一部分。因此脚本(有时)会在包生成之前触发,并且是不可预测的。我的解决方案是增加一些延迟。很遗憾 ”超时x" 不适用于构建后事件。所以我使用了后备选项:

ping 127.0.0.1 -n 4 > NUL

这使得它几乎可靠(〜95%),但我认为这是“穷人”的解决方案。在构建后事件脚本中看起来很荒谬。我已经reported https://developercommunity.visualstudio.com/content/problem/157079/generate-nuget-package-on-build-issue-with-post-bu.html这个问题交给VS团队。但到目前为止还没有太多评论或解决方案。

所以我的问题是:有人有同样的问题吗?或者有比我现在更好的解决方案的想法吗? 谢谢。


The GeneratePackageOnBuild功能执行Pack之后的目标Build因此构建后事件可能会在创建 NuGet 包之前运行。在 VS 15.3+ 中,当您创建构建后事件时,它将创建一个Target项目文件中的元素。您可以更改AfterTargets其属性为AfterTargets="Pack"在打包后运行,而不是在核心 .net 构建后运行。但这是一种有点脆弱的方法。

包目标将尊重PackageOutputPathmsbuild属性,这是什么dotnet pack's --output参数将被设置。

Since xcopy仅适用于 Windows,最通用的解决方案是使用 msbuild 在构建过程中设置属性。

例如你可以放一个Directory.Build.props文件位于解决方案文件(所有项目上方的目录)旁边,内容如下:

<Project>
  <PropertyGroup>
    <PackageOutputPath>$(MSBuildThisFileDirectory)nupkgs</PackageOutputPath>
    <GeneratePackageOnBuild>true</GeneratePackageOnBuild>
  </PropertyGroup>
</Project>

该文件将自动导入到该文件下的目录层次结构中的所有项目文件中,并设置生成的目标目录.nupkg文件到名为的文件夹nupkgs旁边的Directory.Build.props文件。它还为所有支持它的项目(“基于 sdk”的项目,如 .net 标准/.net 核心库)启用“生成包构建”功能,因此您不必在 VS 中进行设置或编辑所有项目文件。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

.Net Core 2.0“在构建时生成 Nuget 包”问题以及构建后事件 的相关文章

随机推荐