NET Core 项目中的 MSBuild 目标不是 运行
MSBuild Target not running in NET Core Project
我正在使用 Visual Studio 2019,.NET Core 3.1
我创建了一个新项目并使用了模板Class库(.NET Core)
我右键单击解决方案资源管理器中的项目,然后单击“编辑项目文件”
并添加以下目标:
<Target Name="Test" AfterTargets="Build">
<Message Text="This is a test" Importance="high" />
</Target>
当我发布时...它命中此目标几次,在输出窗格中我看到 "This is a test" 几次。
我希望此目标在发布而不是构建之后执行。
这适用于 .NET Core Web API 解决方案,在发布事件之前,我正在对包含的 angular 项目执行 ng build在公布的结果中。
但是在 Class 库中,即使我正在执行实际的发布,发布 msbuild 目标也永远不会执行。
所以...
<Target Name="Test" AfterTargets="Publish">
<Message Text="This is a test" Importance="high" />
</Target>
此消息从未显示在我的“输出”窗格中。
此 class 库将发布到私有 NuGet 服务器,我想在发布操作完成后执行 nuget push。一旦我在正确的时间将 msbuild 目标设置为实际 运行,我就可以轻松地执行命令推送到 NuGet 服务器。
我是不是漏掉了什么?在 .NET Core 库解决方案上完成发布操作后如何执行目标?
编辑:
这就提出了另一个问题。当我发布时,我得到这个输出:
1>------ Build started: Project: ClassLibrary1, Configuration: Release Any CPU ------
1>ClassLibrary1 -> C:\Users016409\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:\Users016409\Documents\source\Libraries\NET Core\ClassLibrary1\ClassLibrary1\bin\Release\netcoreapp3.1\ClassLibrary1.dll
2>This is a test
2>Successfully created package 'C:\Users016409\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 ==========
为什么运行构建阶段两次?
有一些内置目标永远不会像 .NET Core Class 库项目的 Publish 那样受到影响。我什至将 publishable 属性 设置为 true 也无济于事。我一直想不通。但我确实发现它正在执行一个我可以挂钩的内置目标 "Pack"。
<Target Name="nuget push" AfterTargets="Pack">
<Exec WorkingDirectory="$(PackageOutputPath)" Command="nuget push $(PackageId).$(PackageVersion).nupkg -source http://DevServices/NuGet" />
</Target>
Pack 是它生成实际 .nupkg 文件的地方。 Pack 目标完成后,我可以推送到本地 NuGet 服务器。
确保在项目属性上取消选中用于在每次构建时生成 Nuget 包的复选框,因为 Pack 目标将在您每次构建时执行。
这样它只会在您发布项目时执行 Pack。您可以发布到任何位置,无论您发布到哪个位置,它都会 运行 生成的 .nupkg 上的 nuget 推送。
如果您确实需要在每个构建上生成一个 .nupkg,但只想在使用发布时执行 nuget 推送,那么请改用此目标,并让它仅在输出时将 nuget 包推送到您的 nuget 服务器路径与您的发布文件夹位置匹配:
<Target Name="nuget push" AfterTargets="Pack" Condition="$(PackageOutputPath.EndsWith('\publish\'))">
<Exec WorkingDirectory="$(PackageOutputPath)" Command="nuget push $(PackageId).$(PackageVersion).nupkg -source http://DevServices/NuGet" />
</Target>
注意:使用这种 nuget 推送方法,如果你的 nuget 服务器设置为不允许你覆盖现有的包版本(这是应该的),那么它需要那些推送包更新版本号,然后才能工作。否则它会在发布时收到错误消息,指出它无法覆盖现有的包版本。像这样 GUI 中的所有内容都可以轻松进入并更新库的版本并再次尝试发布。超级快。超级简单。
我正在使用 Visual Studio 2019,.NET Core 3.1
我创建了一个新项目并使用了模板Class库(.NET Core)
我右键单击解决方案资源管理器中的项目,然后单击“编辑项目文件”
并添加以下目标:
<Target Name="Test" AfterTargets="Build">
<Message Text="This is a test" Importance="high" />
</Target>
当我发布时...它命中此目标几次,在输出窗格中我看到 "This is a test" 几次。
我希望此目标在发布而不是构建之后执行。
这适用于 .NET Core Web API 解决方案,在发布事件之前,我正在对包含的 angular 项目执行 ng build在公布的结果中。
但是在 Class 库中,即使我正在执行实际的发布,发布 msbuild 目标也永远不会执行。
所以...
<Target Name="Test" AfterTargets="Publish">
<Message Text="This is a test" Importance="high" />
</Target>
此消息从未显示在我的“输出”窗格中。
此 class 库将发布到私有 NuGet 服务器,我想在发布操作完成后执行 nuget push。一旦我在正确的时间将 msbuild 目标设置为实际 运行,我就可以轻松地执行命令推送到 NuGet 服务器。
我是不是漏掉了什么?在 .NET Core 库解决方案上完成发布操作后如何执行目标?
编辑: 这就提出了另一个问题。当我发布时,我得到这个输出:
1>------ Build started: Project: ClassLibrary1, Configuration: Release Any CPU ------
1>ClassLibrary1 -> C:\Users016409\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:\Users016409\Documents\source\Libraries\NET Core\ClassLibrary1\ClassLibrary1\bin\Release\netcoreapp3.1\ClassLibrary1.dll
2>This is a test
2>Successfully created package 'C:\Users016409\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 ==========
为什么运行构建阶段两次?
有一些内置目标永远不会像 .NET Core Class 库项目的 Publish 那样受到影响。我什至将 publishable 属性 设置为 true 也无济于事。我一直想不通。但我确实发现它正在执行一个我可以挂钩的内置目标 "Pack"。
<Target Name="nuget push" AfterTargets="Pack">
<Exec WorkingDirectory="$(PackageOutputPath)" Command="nuget push $(PackageId).$(PackageVersion).nupkg -source http://DevServices/NuGet" />
</Target>
Pack 是它生成实际 .nupkg 文件的地方。 Pack 目标完成后,我可以推送到本地 NuGet 服务器。
确保在项目属性上取消选中用于在每次构建时生成 Nuget 包的复选框,因为 Pack 目标将在您每次构建时执行。
这样它只会在您发布项目时执行 Pack。您可以发布到任何位置,无论您发布到哪个位置,它都会 运行 生成的 .nupkg 上的 nuget 推送。
如果您确实需要在每个构建上生成一个 .nupkg,但只想在使用发布时执行 nuget 推送,那么请改用此目标,并让它仅在输出时将 nuget 包推送到您的 nuget 服务器路径与您的发布文件夹位置匹配:
<Target Name="nuget push" AfterTargets="Pack" Condition="$(PackageOutputPath.EndsWith('\publish\'))">
<Exec WorkingDirectory="$(PackageOutputPath)" Command="nuget push $(PackageId).$(PackageVersion).nupkg -source http://DevServices/NuGet" />
</Target>
注意:使用这种 nuget 推送方法,如果你的 nuget 服务器设置为不允许你覆盖现有的包版本(这是应该的),那么它需要那些推送包更新版本号,然后才能工作。否则它会在发布时收到错误消息,指出它无法覆盖现有的包版本。像这样 GUI 中的所有内容都可以轻松进入并更新库的版本并再次尝试发布。超级快。超级简单。