我想显示一个字符串,告诉用户使用哪个构建配置来构建应用程序。例如:
如果命令行类似于:
msbuild project.sln /t:Build /p:Configuration=Release
然后在源代码中,我想这样做:
Console.Writeline("You are running the " + <get the /p:Configuration value> + " version" );
用户会看到:
您正在运行发布版
我知道我们可以在命令提示符下声明条件编译符号(#defines),例如如何定义in this article和this one。但我想使用名为Configuration
的现有变量。
答案 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>
因此,您将为每个配置包含不同的文件集,您可以在其中指定用户现在拥有的配置。