我正在使用Visual Studio 2019,. NET核心3.1
我创建一个新项目并使用模板类库(. NET核心)
我在解决方案资源管理器中右键单击该项目,然后单击"编辑项目文件
并添加以下目标:
<Target Name="Test" AfterTargets="Build">
<Message Text="This is a test" Importance="high" />
</Target>
当我发布时...它命中这个目标几次,在输出窗格中我看到"这是一个测试"几次。
我希望此目标在发布后而不是在生成后执行。
这适用于. NET Core Web API解决方案,其中在发布事件之前,我正在发布结果中包含的Angular 项目上执行ng构建。
但是在类库中,就像发布msbuild目标永远不会执行一样,即使我正在进行实际的发布。
所以...
<Target Name="Test" AfterTargets="Publish">
<Message Text="This is a test" Importance="high" />
</Target>
此消息从不显示在"输出"窗格中。
此类库将发布到私有NuGet服务器,我希望在完成发布操作后执行nuget推送。一旦让msbuild目标在正确的时间实际运行,我就可以轻松执行命令以推送到NuGet服务器。
我是不是漏掉了什么?在一个. NET核心库解决方案上,发布操作完成后,我如何执行一个目标?
- EDIT:**这就引出了另一个问题。当我发布时,我得到了以下输出:
1>------ Build started: Project: ClassLibrary1, Configuration: Release Any CPU ------
1>ClassLibrary1 -> C:\Users\11016409\Documents\source\Libraries\NET Core\ClassLibrary1\ClassLibrary1\bin\Release\netcoreapp3.1\ClassLibrary1.dll
1>This is a test
2>------ Publish started: Project: ClassLibrary1, Configuration: Release Any CPU ------
2>ClassLibrary1 -> C:\Users\11016409\Documents\source\Libraries\NET Core\ClassLibrary1\ClassLibrary1\bin\Release\netcoreapp3.1\ClassLibrary1.dll
2>This is a test
2>Successfully created package 'C:\Users\11016409\Documents\source\Libraries\NET Core\ClassLibrary1\ClassLibrary1\bin\Release\netcoreapp3.1\publish\ClassLibrary1.1.0.0.nupkg'.
========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========
========== Publish: 1 succeeded, 0 failed, 0 skipped ==========
为什么它运行构建阶段两次?
1条答案
按热度按时间km0tfn4u1#
有一些内置的目标永远不会被击中,比如Publish for a. NET Core Class Library项目。我甚至将publishable属性设置为true也无济于事。我从来没有能够弄清楚这一点。但我确实发现它正在执行一个我可以挂钩的内置目标"Pack"。
压缩是它生成实际的. nupkg文件的地方。一旦压缩目标完成,我就可以推送到我的本地NuGet服务器。
确保在项目属性上取消选中用于在每次构建时生成Nuget包的复选框,因为Pack目标将在每次构建时执行。
这样,它只会在您发布项目时执行打包。您可以发布到任何位置,并且它将在生成的. nupkg上运行nuget推送,而不管您发布到哪个位置。
如果您确实需要在每个构建上生成一个. nupkg,但只想在使用publish时执行nuget推送,那么请改用此目标,并让它仅在输出路径与您的publish文件夹位置匹配时将nuget包推送到您的nuget服务器:
编辑:这在Visual Studio 17.3.6之后不再起作用。它似乎不会自动对nuget包进行打包,除非您希望它通过项目属性在每次生成时进行打包。您可以在解决方案资源管理器中右键单击该项目,然后选择"打包"及以上选项
目标后=" Package "
将执行您的代码。