Visual Studio 和 vcxproj 文件中导入的 MSBuild 属性



我试图将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 仅从项目文件本身中的项创建可视化和可编辑选项的列表。

包含文件中的项仅用作配置选项的默认值。处理和使用包含文件中的值,即使它们未在 GUI 中可视化。

要在 GUI 中查看某些内容,您必须.vcxproj文件中至少添加空的相应项目

例如,要查看主配置,您需要添加空的"属性组" 带有标签"配置"(对于每个项目配置)到.vcxproj文件:

  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
  </PropertyGroup>

若要查看名称、输出文件的位置和其他常规属性,请添加不带标签的空"属性组":

  <PropertyGroup />

要查看 C/C++ 编译器、链接器和库设置,请将"ItemDefinitionGroup"与"ClCompile"、"Link"和"Lib"项添加到.vcxproj文件中:

  <ItemDefinitionGroup>
    <ClCompile />
    <Link />
    <Lib />
  </ItemDefinitionGroup>

如果将此处提到的所有内容添加到.vcxproj文件中,您将在 GUI 中看到所有 C/C++ 设置,并且您将能够更改它们。

如果您正确使用"属性表",您可以在VS的Property Manager窗口中看到它们,按层次结构排列,包括其中包含的选项。这真的非常方便。

我猜您现在手动修改了 vcxproj 并添加了Import.虽然这也可以工作(如您所见,反映在命令行中),但它不能很好地与 VS 一起使用。因此,不要这样做,而是还原您的更改并转到属性管理器并在那里添加一些属性文件。VS 将在正确的位置为您创建 Import 语句,并应照常显示所有属性。

最新更新