如何使用名为Configuration的MSBuild命令行参数作为条件编译符号?

时间:2013-04-03 03:41:17

标签: c# visual-studio msbuild

我想显示一个字符串,告诉用户使用哪个构建配置来构建应用程序。例如:

如果命令行类似于:

msbuild project.sln /t:Build /p:Configuration=Release

然后在源代码中,我想这样做:

Console.Writeline("You are running the " + <get the /p:Configuration value> + " version" );

用户会看到:

  

您正在运行发布版

我知道我们可以在命令提示符下声明条件编译符号(#defines),例如如何定义in this articlethis one。但我想使用名为Configuration的现有变量。

1 个答案:

答案 0 :(得分:4)

除非您说=使用#if,否则无法执行此操作。 MSBuild配置名称只是项目文件中配置集的名称,用于构建项目的特定风格。默认情况下,您无法从代码中访问此配置名称。

我看到两种方法可以更改代码中的字符串:

a)正如您所说 - 您可以指定条件编译符号,因此您可以执行类似

的操作
#if DEBUG
const string Flavor = "Debug";
#else
const string Flavor = "Release";
#endif
...
Console.WriteLine("You are running the " + Flavor + " version" );

b)您可以使用项目文件并根据配置包含不同的文件集。如果你要卸载你的项目并打开csproj只是一个文件 - 你会看到例如

<ItemGroup>
  <Compile Include="MyApp.cs" />
</ItemGroup>

您可以更改为:

<ItemGroup>
  <Compile Include="MyApp.Release.cs" Condition="'$(Configuration)'=='Release'" />
  <Compile Include="MyApp.Debug.cs" Condition="'$(Configuration)'=='Debug'" />
</ItemGroup>

因此,您将为每个配置包含不同的文件集,您可以在其中指定用户现在拥有的配置。