为啥 vcxproj.filters 文件存在?

Posted

技术标签:

【中文标题】为啥 vcxproj.filters 文件存在?【英文标题】:Why do vcxproj.filters files exist?为什么 vcxproj.filters 文件存在? 【发布时间】:2011-08-04 13:00:57 【问题描述】:

不应该将 vcxproj.filters 嵌入到 .vcxproj 中吗?就目前而言,我必须将其签入源代码管理,以便其他人可以看到解决方案中的文件夹结构。

【问题讨论】:

对于 C#,等效的项目信息似乎不会导致此问题/不确定性。我想知道这是否是因为(如下面对答案的评论中所述)过滤器信息对文件系统来说基本上是多余的,因此在 C# 中他们没有存储它的第二个副本。 【参考方案1】:

根据 Dan Moseley 在this question 中所说,他们还希望将树结构与构建特定信息分开,因为更改树结构会导致对项目文件进行更新,而这反过来会触发重建。通过将项目的逻辑视图移动到单独的文件,可以避免这种情况。

【讨论】:

IMO 他们应该刚刚废弃了 IDE 中的过滤器。已经有一个逻辑树结构,它被称为“文件系统”。目前有很多重复——每个文件都必须添加到文件系统、构建脚本 (vcxproj)、过滤器 (vcxproj.filters)、源代码控制,也许还有其他地方。它违反了 DRY 原则。【参考方案2】:

实际上,它们已嵌入到以前版本的 Visual Studio 中。扩展名仍然是 .vcproj,过滤器存储在项目文件中。但是,自 2010 年起,决定将 .filter 信息提取到单独的文件中。

现在真正由设计团队决定是否添加此源代码控制。如果您希望所有开发人员具有相同的结构(出于沟通原因),最好将它们签入。如果您想让每个开发人员使用自己的逻辑视图,那就不要。

【讨论】:

【参考方案3】:

vcxproj 文件包含用于 msbuild 环境的命令。所以它包含应该构建的文件以及编译器如何构建/链接等源文件的参数。

因此,开发团队决定解决方案资源管理器中文件的“视图”不应包含在 msbuild 文件中,而应包含在另一个文件中。

这样做是为了将构建设置与您拥有的视图分开。

【讨论】:

以上是关于为啥 vcxproj.filters 文件存在?的主要内容,如果未能解决你的问题,请参考以下文章

关于VC工程的组成

Visual Studio 2013新建工程导入现有代码文件夹并且保持目录结构

Javascript:当元素存在于数组中时,为啥 indexOf 函数返回 -1?

1.为啥安装vmtools时,linux里rpm的-ivh命令无效rpm的help里没有v和h参数,却有两个i参数解释都不同

为啥文件存在和文件大小检查不能结合使用?

Java:如果文件不存在,我无法为文件是不是存在创建条件。为啥?