gpt4 book ai didi

visual-studio - .Net Core 2.0 "Generate Nuget package on build"问题与构建后事件

转载 作者:行者123 更新时间:2023-12-04 05:28:39 27 4
gpt4 key购买 nike

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

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

有时它工作正常有时根本不工作。到目前为止,我的调查得出结论,Nuget 包的创建不是构建过程本身的一部分。所以脚本(有时)会在包生成之前触发,这是不可预测的。我的解决方案是增加一些延迟。不幸的是,“ timeout x ”不适用于构建后事件。所以我使用了后备选项:
ping 127.0.0.1 -n 4 > NUL

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

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

最佳答案

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

包目标将遵守 PackageOutputPath msbuild 属性,这是什么 dotnet pack--output参数将设置。

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 中进行设置或编辑所有项目文件.

关于visual-studio - .Net Core 2.0 "Generate Nuget package on build"问题与构建后事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47576451/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com