Configuration 解决方案配置在VisualStudio中究竟是如何工作的?

Configuration 解决方案配置在VisualStudio中究竟是如何工作的?,configuration,visual-studio-2017,Configuration,Visual Studio 2017,在.sln文件中时,您有“调试”和“发布”的默认选项。据我所知,这些“构建设置”根据您正在进行的构建的类型而有所不同 我最近尝试创建自己的设置,发现(令我惊讶的是)创建配置名称似乎并没有创建可识别的符号: #if MY_SHINY_NEW_SYMBOL Console.WriteLine("TESTING MY SYMBOL"); #endif 在上,我可以看到有代码允许您实际定义符号(可能与在Configuration Manager中创建符号不同): 这些符号是如何工作

在.sln文件中时,您有“调试”和“发布”的默认选项。据我所知,这些“构建设置”根据您正在进行的构建的类型而有所不同

我最近尝试创建自己的设置,发现(令我惊讶的是)创建配置名称似乎并没有创建可识别的符号:

#if MY_SHINY_NEW_SYMBOL  
    Console.WriteLine("TESTING MY SYMBOL");  
#endif  
在上,我可以看到有代码允许您实际定义符号(可能与在Configuration Manager中创建符号不同):

这些符号是如何工作的,它们在哪里配置

我这么问是因为我无意中创建了一个名为“local”的符号。我删除了它,然后创建了一个名为“Local”的符号。我得到了编译错误,因为“local”符号似乎仍然存在,我不能用不同大小写的符号覆盖它

我根本没有配置符号,我正在预构建事件命令中使用变量
$(ConfigurationName)


实际上,我相当肯定这是一个Visual Studio错误,因为我认为删除一个配置,用不同的案例重新创建相同的配置,不会导致重新出现原始配置。

生成配置成为MSBuild变量,可在
csproj
文件的MSBuild属性中引用(请记住,.Net项目文件实际上是MSBuild脚本)

特别是,VisualStudio项目属性窗口将允许您在每个配置的基础上设置大多数属性(通过将其包装在条件块中)

特别是,
DEBUG
符号的设置如下(您将在每个
csproj
文件中看到这一点,但不那么简单):


...
调试;痕迹
...
您也可以替换此选项,并直接为配置设置符号:

<DefineConstants>$(Configuration)</DefineConstants>
$(配置)

但是,如果VS保存您的项目文件,它可能会改变这一点。

谢谢-我不知道VS实际上是一个创建MSBuild脚本的UI!(这是正确的措辞吗?@ZachSmith:是的(嗯,VS的那部分)。
<PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
    ...
    <DefineConstants>DEBUG;TRACE</DefineConstants>
    ...
</PropertyGroup>
<DefineConstants>$(Configuration)</DefineConstants>