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

时间:2017-11-30 15:02:18

标签: visual-studio nuget .net-core nuget-package .net-core-2.0

新的.NET Core 2.0项目提供了从项目输出中创建Nuget Package的简便方法。只需单击“在构建时生成Nuget包”复选框即可完成。 enter image description here 它工作正常,但我有一个构建后事件的问题。 我想在每次构建后将解决方案中的所有包复制到特定文件夹。所以我使用“构建后事件命令行”和脚本:

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

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

ping 127.0.0.1 -n 4 > NUL

这使它几乎可靠(~95%),但我认为这是“穷人”的解决方案。在Post-build事件脚本中看起来很荒谬。我已经向VS团队reported发了这个问题。但到目前为止没有太多评论或解决方案。

所以我的问题是:有没有人有同样的问题?或者我现在有什么想要更好的解决方案? 感谢。

2 个答案:

答案 0 :(得分:7)

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

包目标将尊重PackageOutputPath msbuild属性,这是dotnet pack的{​​{1}}参数设置的内容。

由于--output仅适用于Windows,因此最通用的解决方案是使用msbuild在构建期间设置属性。

例如,您可以在解决方案文件(所有项目上方的目录)旁边放置一个xcopy文件,其中包含以下内容:

Directory.Build.props

此文件将自动导入到目录层次结构中的所有项目文件中,并将生成的<Project> <PropertyGroup> <PackageOutputPath>$(MSBuildThisFileDirectory)nupkgs</PackageOutputPath> <GeneratePackageOnBuild>true</GeneratePackageOnBuild> </PropertyGroup> </Project> 文件的目标目录设置为.nupkg旁边的nupkgs文件夹文件。它还支持所有支持它的项目的“生成包构建”功能(“基于sdk”项目,如.net标准/ .net核心库),因此您不必在VS中设置它或编辑所有项目文件。

答案 1 :(得分:3)

您可以在项目文件中配置msbuild task order