首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何通过dotnet发布将预处理指令传递给MSBuild

如何通过dotnet发布将预处理指令传递给MSBuild
EN

Stack Overflow用户
提问于 2022-04-10 17:27:56
回答 1查看 273关注 0票数 1

我有一个带有SPA的ASP.NET Core6.0 WebApi解决方案。默认模板在默认情况下通过运行下面的PublishAngular目标来生成SPA。

WebApi.csproj文件:

代码语言:javascript
运行
复制
<Project Sdk="Microsoft.NET.Sdk.Web">
   <!-- ... -->
   <!-- .NET Core Web API is being build here-->
   <!-- ... -->
   <Target Name="PublishAngular" AfterTargets="ComputeFilesToPublish">
      <!-- ... -->
      <!-- SPA is getting built here-->
      <!-- ... -->
   </Target>
</Project>

我正在将WebApi迁移到Docker,并希望最终完全脱离SPA。但是这是一个很长的过程,所以目前我希望有一种方法来指定是否要使用build命令行有条件地构建SPA。

我使用了一个名为DOCKER_BUILD的预处理指令,所以在我的C#文件中执行如下操作:

代码语言:javascript
运行
复制
#if !DOCKER_BUILD
   services.ConfigureSpa();
#endif

我的问题是:

  1. :从构建命令行向MSBuild引擎传递参数以排除/包含csproj文件中的PublishAngular目标的最佳方法是什么?
  2. 我可以重用DOCKER_BUILD预处理器实现这一点吗?

我的构建命令行如下所示:

dotnet publish -c Release -o out

我尝试将DOCKER_BUILD传递为:

dotnet publish -c Release -o out /p:DOCKER_BUILD

并像这样修改SPA构建目标:

<Target Name="PublishAngular" AfterTargets="ComputeFilesToPublish" Condition="!DOCKER_BUILD">

但没有取得多大的成功。我做错了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-04-15 00:49:52

它的工作原理如下。构建命令行:

dotnet msbuild -target:Publish /p:DefineConstants=DOCKER_BUILD

csproj目标条件:

<Target Name="PublishAngular" AfterTargets="ComputeFilesToPublish" Condition="!$(DefineConstants.Contains('DOCKER'))">

DefineConstants参数也适用于C#文件中的代码,因此这也适用于:

代码语言:javascript
运行
复制
#if DOCKER_BUILD
   // some docker specific code
#endif
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71818999

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档