我正在尝试遵循此处的文档 - https://docs.microsoft.com/en-us/visualstudio/msbuild/how-to-extend-the-visual-studio-build-process?view=vs-2017 -- 将一个简单的 Target 添加到 .NET Core 项目文件的构建管道中。但是,我做错了什么,只是看不到它。
我采用了一个简单的“Hello World”项目文件,添加了一个仅打印消息的简单目标,并BuildDependsOn按照文档的建议重新定义以获取:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp2.2</TargetFramework>
<BuildDependsOn>
Target1;
$(BuildDependsOn)
</BuildDependsOn>
</PropertyGroup>
<Target Name="Target1">
<Message Text="Running Target1" Importance="high" />
</Target>
</Project>
Run Code Online (Sandbox Code Playgroud)
当我尝试使用 msvc2017 或 dotnet CLI(“dotnet build -c Release Hello.csproj”)“构建”此项目时,不会打印该消息。
当我使用 msbuild 查看完全预处理的项目时,我可以清楚地看到BuildDependsOn属性的定义。我不确定为什么我的重新定义没有被采纳。我也试过同样的方法RebuildDependsOn,但没有效果。
有什么建议?我在这里缺少什么?
在此先感谢您的帮助!
事情没有像您预期的那样工作的原因是因为您有一个 SDK 风格的项目:<Project Sdk="Microsoft.NET.Sdk">.
请注意:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net46</TargetFramework>
</PropertyGroup>
</Project>
Run Code Online (Sandbox Code Playgroud)
相当于:
<Project>
<!-- Implicit top import -->
<Import Project="Sdk.props" Sdk="Microsoft.NET.Sdk" />
<PropertyGroup>
<TargetFramework>net46</TargetFramework>
</PropertyGroup>
<!-- Implicit bottom import -->
<Import Project="Sdk.targets" Sdk="Microsoft.NET.Sdk" />
</Project>
Run Code Online (Sandbox Code Playgroud)
Sdk.targets项目结束时的隐式导入会覆盖您对 的定义BuildDependsOn。
您可以改为显式添加导入,然后BuildDependsOn在Sdk.targets导入后添加您的定义。
<Project>
<Import Project="Sdk.props" Sdk="Microsoft.NET.Sdk" />
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp2.2</TargetFramework>
</PropertyGroup>
<Target Name="Target1">
<Message Text="Running Target1" Importance="high" />
</Target>
<Import Project="Sdk.targets" Sdk="Microsoft.NET.Sdk" />
<PropertyGroup>
<BuildDependsOn>
Target1;
$(BuildDependsOn)
</BuildDependsOn>
</PropertyGroup>
</Project>
Run Code Online (Sandbox Code Playgroud)
请参阅如何:扩展 Visual Studio 构建过程和如何:使用 MSBuild 项目 SDK。
| 归档时间: |
|
| 查看次数: |
421 次 |
| 最近记录: |