Visual studio .Net核心2.0“;“在构建时生成Nuget包”;生成后事件的问题

Visual studio .Net核心2.0“;“在构建时生成Nuget包”;生成后事件的问题,visual-studio,nuget,.net-core,nuget-package,.net-core-2.0,Visual Studio,Nuget,.net Core,Nuget Package,.net Core 2.0,新的.NETCore2.0项目提供了从项目输出创建Nuget包的简单方便的方法。只需点击“在构建时生成Nuget包”复选框,它就完成了。 它工作正常,但我对后期构建事件有一个问题。 我想在每次构建后将解决方案中的所有包复制到特定文件夹中。因此,我将“生成后事件命令行”与脚本一起使用: xcopy "$(ProjectDir)$(OutDir)..*.nupkg" "$(SolutionDir)..\WebServicePracticesNuget\" /Y /I 有时效果很好,有时根本不起作用

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

xcopy "$(ProjectDir)$(OutDir)..*.nupkg" "$(SolutionDir)..\WebServicePracticesNuget\" /Y /I
有时效果很好,有时根本不起作用。到目前为止,我的调查得出结论,Nuget包的创建不是构建过程本身的一部分。因此,脚本(有时)会在生成包之前触发,并且不可预测。我的解决办法是增加一些延迟。不幸的是,“超时x”无法处理生成后事件。所以我使用了回退选项:

ping 127.0.0.1 -n 4 > NUL
这使得它几乎可靠(~95%),但我认为这是“穷人”的解决方案。在构建后事件脚本中看起来很可笑。我已经向VS团队提出了这个问题。但到目前为止,没有太多的评论或解决方案

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

您可以在项目文件中进行配置

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

pack目标将尊重
PackageOutputPath
msbuild属性,这是
dotnet pack
--output
参数将设置的属性

由于
xcopy
仅适用于windows,因此最通用的解决方案是在生成期间使用msbuild设置属性

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

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

$(MSBuildThisFileDirectory)nupkgs
真的

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

谢谢你的链接,看起来很有希望。更优雅的是:)我将在所有项目中进一步测试它,但希望它能正常工作。这对我来说是正确的答案。只需在您的csproj文件中写入以下内容:
谢谢您的回答。现在我正在测试@patutin建议。看起来很有希望。你能解释一下为什么会这样吗,正如你所写的:“但这是一种脆弱的方法。”?自动导入的项目设置听起来不错。我不是MSbuild配置方面的专家。但我当然也会研究这个问题。谢谢。这取决于后期构建步骤中的其他内容。包输出路径还应该包括符号包(
dotnet-pack——在msbuild文件中包括符号
true
),Ok尝试了一个简单的方法,效果很好。事实上,我在用户界面上一遍又一遍地设置相同的配置,例如:Author、IconUrl等。。我对true有一些问题,它必须在项目文件中设置,以便打包XML文档。我把所有东西都放进了.props文件。有史以来最好的解决方案:)谢谢。@MartinUllrich我在使用
GeneratePackageOnBuild
时遇到了类似的问题,它在我的本地计算机上工作,但在VSTS Azure构建管道中不工作。参考:你能看一下同样的指南吗