Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用名为Configuration的MSBuild命令行参数作为条件编译符号?_C#_Visual Studio_Msbuild - Fatal编程技术网

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代码中获取配置值?