为什么VS2010允许“包含在项目中”的概念?

4
我仍在学习VS2010如何看待世界的基础知识。显然,您可以选择在项目中“包含”文件。我有点困惑:如果文件是版本控制的,并且文件位于项目目录中,那么它不应该隐式地被“包含”在项目中吗?如果不是,那么版本控制文件在项目目录中不应包含在项目中的用例是什么?
=== 补充 ===
根据我迄今为止得到的答案,也许我应该重新表达我的问题:文件“包含”在项目中意味着什么?

文件夹中的文件 == 你拥有的所有衣服,项目 == 休闲晚餐穿的裙子。你不会只因为拥有它们就把所有T恤都放进去,你只会选择需要或必须穿的东西。 - Alexei Levenkov
没错,但我正在寻找有人能够向我解释“包含在项目中”实际上意味着什么。为什么任何版本控制的文件都不应该是项目的一部分?有什么缺点吗? - Stephen Gross
7个回答

5
不,你不想将恰好在项目目录中的随机文件包含在源代码控制中。

不,那不是我在问的。如果一个文件打算进行版本控制,为什么它不会同时被包含在项目中呢? - Stephen Gross
“因为我这么说”,或者出于其他原因,比如我太懒了,不想为那些版本控制但不属于项目的东西创建文件夹。为什么要假设文件夹中的所有内容都是项目的一部分呢? - John Saunders

5
一个项目需要知道文件以便进行编译和分发。仅仅因为你有一个在源代码控制下的文件,并不意味着如果项目没有意识到它,它就会被编译。
此外,您可能希望将文件包含在分发包中。我们经常为使用web app gallery分发的Web项目这样做。
相反,您可能有文档或SQL脚本版本控制,但不想将它们作为项目的一部分。
编辑:回答您的更新,文件包含在项目中意味着该文件实际上已添加到 .csproj .vbproj 文件中,并将在编译和/或分发期间使用。VS确实区分文件是否为Content或是否需要Compile它。可以通过单击解决方案资源管理器中的文件并查看生成操作属性来查看。

你能否澄清一下:如果在项目中“包含”一个文件,是否意味着该文件是构建过程的一部分? - Stephen Gross
不一定,比如说你正在编写一个 Web 应用程序,需要内容(图片、CSS 等)。你可以单独创建它们,但是你需要右键单击并将它们包含在项目中以进行分发。同样的情况也适用于你外部创建的网页。 - CAbbott
我需要澄清一下:在“解决方案资源管理器”中,您可以选择“显示全部”,然后右键单击文件将其包含在项目中。 - CAbbott
好的,非常有趣。下一个问题:如果一个文件被“包含在项目中”,但在源代码控制中不存在会发生什么?我正在调查“服务引用”目录的内容,我看到列出了一堆在源代码控制中不存在的文件。 - Stephen Gross
它们听起来像是应用程序的可能分发文件。如果解决方案从源代码控制创建,您可能会遇到问题。您可能希望将这些文件添加到该解决方案的源代码控制中。 - CAbbott

3

有时我们会将文档(pdf)或绘图/原理图放在项目文件夹中并进行版本控制,但您不需要将它们放在Visual Studio项目中(特别是当它们不需要分发因为它们仅供内部使用时)。


1

如果文件与项目相关但在解决方案中不一定需要,那么将其从项目中排除可能很有用。

示例 如果我需要一些测试XML用于正在编写的应用程序,该应用程序通常从WCF服务获取这些文件,则在开发环境中使用IO获取XML以进行测试时,保留该文件在目录中可能是有用的,但我并不一定希望将其包含在受源代码控制的解决方案中。


1

当你从项目中排除一个文件时,它将不再被编译或嵌入,然后当你想要再次包含它时,你可以这样做而不会丢失你的设置。


在这种情况下,我正在处理的文件不是源文件。那么它是否包含在项目中有什么关系呢? - Stephen Gross
可能并没有什么区别,他们只是不想为未编译、嵌入、复制等文件实现一个单独的功能集。很有可能,如果你了解项目如何编译,那么处理这些文件的方式会有所不同,但这只会影响到你编写自定义构建脚本时。 - Eva Lacy

0
如果您将一个文件(包含一个希望在项目中使用的有用类)复制到项目的某个文件夹中,那么您将什么也看不到。您必须检查解决方案资源管理器的“显示所有文件”选项,然后可以看到已复制的文件,但它仍处于“灰色”状态。现在您可以选择菜单项包括在项目中,该文件将被集成到您的项目中,并为您的源代码控制添加一个挂起更改(添加)。Visual Studio不会自动将其找到的所有文件都包含在项目中 - 这是一个好特性。

0

我的一位同事向我解释了一个情景,即版本控制的文件不应该成为项目的一部分。以下是这个想法:

  • 开发人员编写了一些新代码。
  • 该代码是实验性的,不打算成为正常构建的一部分。
  • 将文件从构建中排除的最简单方法是不将其包含在项目中,但仍然进行版本控制。
  • 这样,文件可以与其他开发人员共享,但不会破坏构建。

这就是版本控制中分支的作用。如果你的实验性工作涉及到项目中已有的文件,会发生什么?在这种情况下,如果你提交更改,就会对所有人造成混乱,因此你自己的更改实际上根本没有被纳入版本控制。对我来说,将一个不属于项目实际部分的文件放入项目中这个概念完全没有任何意义。 - user467257

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接