Visual Studio 2019:使用属性表的奇怪行为

Posted

技术标签:

【中文标题】Visual Studio 2019:使用属性表的奇怪行为【英文标题】:Visual Studio 2019: Strange behavior using property sheets 【发布时间】:2022-01-22 09:03:15 【问题描述】:

我希望我能提供一个更好的描述,但这很难简洁地描述。

让我从一些背景开始。这是使用 Visual Studio 2019 社区版的 C++ 解决方案。它有 12 个不同类型的项目(DLL、静态库和可执行测试)和 4 种构建配置((Release, Debug)x(Win32, x64))。跨项目和配置保持所有属性相同是一件非常痛苦的事情,因此我决定尝试使用属性表,以便我可以跨项目共享属性。鉴于我的解决方案的结构,属性表本身有些复杂,但它比我所拥有的有所改进。

但是,在迁移进行到一半时,我发现了一些奇怪的行为。当我检查我的一个项目(静态库)的属性时,属性页面几乎完全是空的。不仅我用工作表更改的属性丢失了,甚至你期望的默认属性也丢失了。

但是,当我构建这个项目时,我可以看出大多数自定义属性实际上设置正确,尽管缺少,所以它看起来像一个 UI 错误,除了一些属性设置不正确,例如构建日志尽管在属性表中进行了设置,但未写入正确的位置。这让我担心其他更重要的属性可能没有正确设置,但很难知道哪些属性被设置,哪些没有。

我有另一个静态库项目,它使用相同的属性表以相同的方式设置,并且运行正常。它在项目属性中显示了预期的属性,构建日志甚至在正确的位置。

它变得更加陌生。当我使用msbuilddevenv 从命令行运行构建时,构建日志将写入正确的位置。这表明从命令行构建工作正常,并且从 Visual Studio 构建与从命令行构建不同。

我运行msbuild -pp 来查看扩展的项目文件,它看起来是正确的。我将此项目文件与我的解决方案中正常工作的另一个静态库进行了比较,差异符合预期,只有项目名称、路径和源文件不同。我也在扩展的项目文件上做了这个差异,除了预期的差异之外,它们是相同的。

我已经无数次关闭并重新打开 Visual Studio。我还卸载并重新加载了该项目。我什至尝试过删除 .vs 文件夹。这些都没有任何影响。

Here is a link to my code.

Screenshots demonstrating what I mean.

有没有办法解决这个问题?我做错了什么吗?我希望我的属性表中的所有属性都显示在项目属性中,并且我特别需要在构建项目时应用所有这些属性。

【问题讨论】:

【参考方案1】:

在我的项目文件 (.vcxproj) 中将包含源文件的 <ItemGroup>s 移动到 <ImportGroup>s 下面解决了这个问题。我无法解释为什么这有效,或者为什么这首先是一个问题,但它解决了它。

【讨论】:

以上是关于Visual Studio 2019:使用属性表的奇怪行为的主要内容,如果未能解决你的问题,请参考以下文章

Microsoft Visual Studio 工程属性表props/vsprops创建与使用

如何在 Visual Studio 2019 中仅复制代码的非折叠部分?

visual studio 2013 wpf 添加窗口加载和关闭函数

Emmet 扩展缩写在具有属性的 Visual Studio Code 中不起作用

哪些C语言函数在visual studio2015报错并怎么修改

使用Visual Studio 2019中的v141平台工具集进行C ++ / CX项目的构建失败