C# 如何使用名为Configuration的MSBuild命令行参数作为条件编译符号?
我想显示一个字符串,告诉用户用于构建应用程序的构建配置。例如: 如果命令行与此类似:C# 如何使用名为Configuration的MSBuild命令行参数作为条件编译符号?,c#,visual-studio,msbuild,C#,Visual Studio,Msbuild,我想显示一个字符串,告诉用户用于构建应用程序的构建配置。例如: 如果命令行与此类似: msbuild project.sln /t:Build /p:Configuration=Release 然后在源代码中,我想这样做: Console.Writeline("You are running the " + <get the /p:Configuration value> + " version" ); Console.Writeline(“您正在运行“+”版本”); 用户将看
msbuild project.sln /t:Build /p:Configuration=Release
然后在源代码中,我想这样做:
Console.Writeline("You are running the " + <get the /p:Configuration value> + " version" );
Console.Writeline(“您正在运行“+”版本”);
用户将看到:
您正在运行发布版本
我知道我们可以在命令提示符下声明条件编译符号(#defines),比如它是如何定义和定义的。但是我想使用名为
Configuration
的现有变量,除了您所说的=使用#if之外,没有其他方法可以做到这一点。MSBuild configuration name只是项目文件中用于生成项目特定风格的一组配置的名称。默认情况下,您无权从代码访问此配置名称
我看到两种方法可以更改代码中的字符串:
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>
因此,这就是如何为每个配置包含不同的文件集,您可以在其中指定用户现在拥有的配置。旁注,编译符号DEBUG并不一定意味着“DEBUG configuration”;调试配置通常会设置此标志,但并不强制设置。我喜欢您的第二个解决方案。我有几个(多于2个)配置。好主意!谢谢有没有办法仍然在C代码中获取配置值?