vel*_*koz 5 msbuild csproj asp.net-core asp.net-core-2.0
我有一个我想在Visual Studio解决方案中包含的角度项目.我添加了一个类型为ASP.NET Core 2/Empty的新项目,其中包含所有文件,不包括node_modules和类似的文件,直接通过csproj中的通配符.
我遇到的问题是覆盖默认构建目标 - 当触发构建目标时,我想调用"ng build",但这不会发生.关于这一点的一些材料可以在这里和这里找到
1尝试覆盖默认构建目标:
<Target Name="Build">
<Message Importance="high" Text="Overriding default build" />
</Target>
Run Code Online (Sandbox Code Playgroud)
但它仍然没有执行.
2试图指定DefaultTargets,但它不会被调用相同:
<Project DefaultTargets="NgBuild" Sdk="Microsoft.NET.Sdk.Web">
...
<Target Name="NgBuild">
<Message Importance="high" Text="Overriding default build" />
</Target>
Run Code Online (Sandbox Code Playgroud)
只有在我添加属性之后BeforeTargets="Build",消息就在那里.
所以问题是 - 如何覆盖默认构建行为?最终,我想要一个将在其中调用的目标,<Exec Command="ng build">并且不会产生.exe并且不需要项目中的任何.cs文件.
Mar*_*ich 10
Build目标未被覆盖的原因是因为在加载自定义目标时尚未定义目标 - 默认目标会覆盖您的自定义目标.
如果使用基于SDK的项目文件<Project Sdk="…">,则会在项目文件之前和之后自动导入SDK道具和目标文件(只有两个msbuild项目文件).该Build目标是通过该项目的内容后到来,因此会覆盖在项目文件中定义一个进口实际定义.
如果你真的想要覆盖Build目标(稍后会详细介绍),我建议你从隐式SDK导入转移到显式SDK导入:
<Project>
<Import Project="Sdk.props" Sdk="Microsoft.NET.Sdk.Web" />
<!-- Project content -->
<Import Project="Sdk.targets" Sdk="Microsoft.NET.Sdk.Web" />
<Target Name="Build">
<!-- this will override the default Build target. -->
</Target>
</Project>
Run Code Online (Sandbox Code Playgroud)
但是,SDK是围绕编译和生成.NET程序集而构建的.您可能会发现覆盖Build目标可能会导致意外结果,包括您的项目无法生成可由其他项目引用的输出(如果您需要).
如果您只是想为项目添加构建步骤,我建议添加一个挂钩到现有构建过程的自定义目标:
<Target Name="NgBuild" BeforeTargets="BeforeBuild">
<Exec Command="ng build" />
</Target>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2862 次 |
| 最近记录: |