Car*_*Car 5 msbuild visual-studio msbuild-target
我正在使用 Visual Studio 2019、.NET Core 3.1
我创建一个新项目并使用模板类库(.NET Core)
我右键单击解决方案资源管理器中的项目,然后单击“编辑项目文件”
并添加以下目标:
<Target Name="Test" AfterTargets="Build">
<Message Text="This is a test" Importance="high" />
</Target>
Run Code Online (Sandbox Code Playgroud)
当我发布时...它多次达到此目标,并且在输出窗格中我多次看到“这是一个测试”。
我希望这个目标在发布而不是构建之后执行。
这适用于 .NET Core Web API 解决方案,在发布事件之前,我正在对发布结果中包含的角度项目执行ng 构建。
但在类库中,即使我正在执行实际的发布,发布 msbuild 目标也永远不会被执行。
所以...
<Target Name="Test" AfterTargets="Publish">
<Message Text="This is a test" Importance="high" />
</Target>
Run Code Online (Sandbox Code Playgroud)
此消息永远不会显示在我的输出窗格中。
该类库将发布到私有 NuGet 服务器,我想在发布操作完成后执行nuget 推送。一旦我让 msbuild 目标在正确的时间实际运行,我就可以轻松执行命令以推送到 NuGet 服务器。
我在这里错过了什么吗?在 .NET Core 库解决方案上完成发布操作后,如何执行目标?
编辑: 这提出了另一个问题。当我发布时,我得到这个输出:
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 ==========
Run Code Online (Sandbox Code Playgroud)
为什么它运行构建阶段两次?
有些内置目标永远不会受到攻击,例如 .NET Core 类库项目的发布。我什至将可发布属性设置为 true 但无济于事。我一直无法弄清楚这一点。但我确实发现它正在执行一个我可以挂钩的内置目标“Pack”。
<Target Name="nuget push" AfterTargets="Pack">
<Exec WorkingDirectory="$(PackageOutputPath)" Command="nuget push $(PackageId).$(PackageVersion).nupkg -source http://DevServices/NuGet" />
</Target>
Run Code Online (Sandbox Code Playgroud)
Pack 是生成实际 .nupkg 文件的地方。Pack目标完成后,我可以推送到本地 NuGet 服务器。
确保在项目属性上未选中用于在每次构建时生成 Nuget 包的复选框,因为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>
Run Code Online (Sandbox Code Playgroud)
注意:使用此 nuget 推送方法,如果您的 nuget 服务器设置为不允许您覆盖现有的软件包版本(应该是这样),那么它会非常方便,然后它要求那些推送软件包的人更新版本号才能工作。否则,发布时会出现错误,无法覆盖现有的包版本。GUI 中的一切都像这样,可以轻松跳转并更新库版本并再次尝试发布。超级快。超级简单。
编辑:这在 Visual Studio 17.3.6 之后不再有效 看起来它不会自动对 nuget 包执行 Pack,除非您希望它通过项目属性在每个构建上执行此操作。您可以在解决方案资源管理器中右键单击该项目,然后选择 Pack 和上面的内容
AfterTargets =“打包”
将执行您的代码。
| 归档时间: |
|
| 查看次数: |
2030 次 |
| 最近记录: |