我试图将 Visual Studio 2013 Update 4 解决方案中的一些 C++ 项目中的一些属性分解为单独的属性文件,然后将其导入到 vcxproj 文件中。这样做后,我注意到属性似乎不再反映在属性编辑器 GUI 中。例如,如果我从某个文件导入它
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
属性 GUI 中的“字符集”项显示为空白,而不是直接在 vcxproj 文件中定义。然而,属性 GUI 中的 C++ 命令行确实包含 '/D "_UNICODE" /D "UNICODE"',因此看起来该属性已被注意到并生效。
那么这只是一个 GUI 的事情还是做这样的事情会导致东西无法正确构建?我的猜测是,Visual Studio 会查找类似 '' 的元素,但只会直接在 vcxproj 文件中查找,而不是在它导入的任何内容中查找。
Visual Studio 2010、2012、2013、2015、2017、2019 和 2022 仅从 项目文件本身中的项目创建可视化和可编辑选项列表。
来自包含文件的项目仅用作配置选项的默认值。即使未在 GUI 中可视化,也会处理和使用包含文件中的值。
要在 GUI 中看到某些内容,您必须在 .vcxproj 文件中至少添加空的相应项目。
例如,要查看主要配置,您需要添加空的“PropertyGroup” 带有标签“配置”(对于每个项目配置)到 .vcxproj 文件:
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
</PropertyGroup>
要查看输出文件的名称、位置和其他常规属性,请添加不带标签的空“PropertyGroup”:
<PropertyGroup />
要查看 C/C++ 编译器、链接器和 lib 设置,请将“ItemDefinitionGroup”和“ClCompile”、“Link”和“Lib”项添加到 .vcxproj 文件中:
<ItemDefinitionGroup>
<ClCompile />
<Link />
<Lib />
</ItemDefinitionGroup>
如果将此处提到的所有内容添加到 .vcxproj 文件中,您将在 GUI 中看到所有 C/C++ 设置,并且可以更改它们。
Property Manager
窗口中看到它们,它们按层次良好地排序,包括其中包含的选项。这真的非常方便。我猜你现在手动修改了 vcxproj 并添加了一个
Import
。虽然这也有效(正如您所看到的反映在命令行中),但它与 VS 不能很好地协同工作。因此,不要这样做,而是恢复您的更改并前往属性管理器并在那里添加一些属性文件。 VS 将在正确的位置为您创建 Import 语句,并且应像往常一样显示所有属性。