Maj*_*jor 8 visual-studio nuget nuget-package .net-core .net-core-2.0
新的.NET Core 2.0项目提供了从项目输出创建Nuget Package的简便方法.只需单击"在构建时生成Nuget包"复选框即可完成.
它工作正常,但我有一个构建后事件的问题.我想在每次构建后将解决方案中的所有包复制到特定文件夹.所以我使用脚本的" Post-build event命令行 ":
xcopy "$(ProjectDir)$(OutDir)..*.nupkg" "$(SolutionDir)..\WebServicePracticesNuget\" /Y /I
Run Code Online (Sandbox Code Playgroud)
有时它工作得很好,有时根本没有.到目前为止,我的调查得出结论,Nuget包创建不是构建过程本身的一部分.因此,脚本(有时)将在生成包之前触发,并且是不可预测的.我的解决方案是增加一些延迟.不幸的是," 超时x "不适用于构建后事件.所以我使用了后备选项:
ping 127.0.0.1 -n 4 > NUL
Run Code Online (Sandbox Code Playgroud)
这使得它几乎可靠(~95%),但我认为这是"穷人"的解决方案.在Post-build事件脚本中看起来很荒谬.我已经向VS团队报告了这个问题.但到目前为止没有太多评论或解决方案.
所以我的问题是:有没有人有同样的问题?或者我现在有什么想要更好的解决方案?谢谢.
Mar*_*ich 10
该GeneratePackageOnBuild功能在执行Pack目标之后执行目标,Build因此在创建NuGet包之前可能会运行post build事件.在VS 15.3+中,当您创建后构建事件时,它将Target在项目文件中创建一个元素.您可以将其AfterTargets上的属性更改为AfterTargets="Pack"在打包后运行,而不是在核心.net构建之后运行.但这是一个脆弱的方法.
该组目标将尊重PackageOutputPathMSBuild的属性,它是什么dotnet pack的--output参数设置会.
由于xcopy仅适用于Windows,因此最通用的解决方案是使用msbuild在构建期间设置属性.
例如,您可以将Directory.Build.props文件放在解决方案文件(所有项目上方的目录)旁边,其中包含以下内容:
<Project>
<PropertyGroup>
<PackageOutputPath>$(MSBuildThisFileDirectory)nupkgs</PackageOutputPath>
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
</PropertyGroup>
</Project>
Run Code Online (Sandbox Code Playgroud)
此文件将自动导入到目录层次结构中的所有项目文件中,并将生成的.nupkg文件的目标目录设置为文件nupkgs旁边的Directory.Build.props文件夹.它还支持所有支持它的项目的"生成包构建"功能("基于sdk"项目,如.net标准/ .net核心库),因此您不必在VS中设置它或编辑所有项目文件.
您可以在项目文件中配置msbuild任务顺序。
| 归档时间: |
|
| 查看次数: |
2498 次 |
| 最近记录: |