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

问题描述 投票:0回答:2

我试图将 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 msbuild
2个回答
2
投票

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++ 设置,并且可以更改它们。


1
投票
如果您正确使用“属性表”,您可以在 VS 的

Property Manager

 窗口中看到它们,它们按层次良好地排序,包括其中包含的选项。这真的非常方便。

我猜你现在手动修改了 vcxproj 并添加了一个

Import

。虽然这也有效(正如您所看到的反映在命令行中),但它与 VS 不能很好地协同工作。因此,不要这样做,而是恢复您的更改并前往属性管理器并在那里添加一些属性文件。 VS 将在正确的位置为您创建 Import 语句,并且应像往常一样显示所有属性。

© www.soinside.com 2019 - 2024. All rights reserved.