如何在Azure Pipeline中设置c#条件编译符号?

问题描述 投票:0回答:3

我有一个包含条件编译符号的 C# 项目,比如说 SYMBOL。

如何在 Azure Pipeline 中将此 SYMBOL 设置为 true 或 false,然后使用此设置运行 MSBuild?

可以使用MSBuild输入配置吗,或者还有其他方法吗?

亚姆尔:

- task: MSBuild@1
  displayName: 'Build solution'
  inputs:
    solution: 'X.csproj'
    platform: 'AnyCPU'
    configuration: 'Release'
    msbuildArguments: '/target:Publish'
    clean: true
    enabled: true

如果有某种输入,例如“conditionalCompilationSymbol”,那就太好了。

c# msbuild azure-pipelines-yaml
3个回答
0
投票

在您的

csproj
文件或
DirectoryBuild.props
文件中,您可以基于 MSBuild 属性定义常量

<PropertyGorup Condition=" '$(ApplySymbol)' == 'true'">
    <DefineConstants>SYMBOL;$(DefineConstants)</DefineConstants>
</PropertyGroup>

每当设置 MSBuild 属性时,它都会 add SYMBOL 到已定义的常量中。

msbuildArguments: '/target:Publish /p:ApplySymbol=true'

要从管道中调用它,您只需将其添加为参数


0
投票

尝试将

DefineConstants
作为属性传递(通过
p
开关
):

msbuildArguments: '/target:Publish /p:DefineConstants="MyValue;DEBUG"'

0
投票

符号可以被定义 (

#define
),但不能有值。

有一个

DefineConstants
属性,其值将传递给 C# 编译器。该属性的值预计是一个以分号分隔的符号列表。

可以使用

/p
开关将属性传递给 msbuild。

在yaml中,

msbuildArguments
将被修改:

Yaml:
- task: MSBuild@1
  displayName: 'Build solution'
  inputs:
    solution: 'X.csproj'
    platform: 'AnyCPU'
    configuration: 'Release'
    msbuildArguments: '/target:Publish /p:DefineConstants=SYMBOL'
    clean: true
  enabled: true

在 C# 代码中,条件编译块如下所示:

#if SYMBOL
    ...
#endif

添加到现有符号

不幸的是,如果项目已经定义了

DefineConstants
属性并且在命令行上传递了
DefineConstants
的属性定义,则将使用命令行值。

添加到可能存在的符号集不支持开箱即用,但相对容易处理。

创建一个

Directory.Build.targets
文件(如果尚不存在)。 (不要使用
Directory.Build.props
文件。props 文件会在项目定义
DefineConstants
之前提前加载。)

Directory.Build.targets
文件中添加以下
PropertyGroup

  <PropertyGroup Condition="$(DefineAdditionalConstants) != ''">
    <DefineConstants Condition="$(DefineConstants) != ''">$(DefineConstants);$(DefineAdditionalConstants)</DefineConstants>
    <DefineConstants Condition="$(DefineConstants) == ''">$(DefineAdditionalConstants)</DefineConstants>
  </PropertyGroup>

在命令行上使用

DefineAdditionalConstants

Yaml:
- task: MSBuild@1
  displayName: 'Build solution'
  inputs:
    solution: 'X.csproj'
    platform: 'AnyCPU'
    configuration: 'Release'
    msbuildArguments: '/target:Publish /p:DefineAdditionalConstants=SYMBOL'
    clean: true
  enabled: true
© www.soinside.com 2019 - 2024. All rights reserved.