我有一个Visual Studio解决方案。当前,这是一个空的解决方案(=没有项目),我添加了一些解决方案文件夹。
解决方案文件夹似乎只是“虚拟文件夹”,因为它们不是真正在文件系统中创建的,解决方案文件夹中的文件与.sln文件位于同一文件夹中。
我是否忽略了一个设置,该设置告诉Visual Studio将“解决方案文件夹”视为“真实”文件夹,即在文件系统中创建它们并在我将它们在解决方案中移动到其中一个文件夹时将文件移动到其中?
编辑:谢谢。然后对VS2010提出建议:)
我有一个Visual Studio解决方案。当前,这是一个空的解决方案(=没有项目),我添加了一些解决方案文件夹。
解决方案文件夹似乎只是“虚拟文件夹”,因为它们不是真正在文件系统中创建的,解决方案文件夹中的文件与.sln文件位于同一文件夹中。
我是否忽略了一个设置,该设置告诉Visual Studio将“解决方案文件夹”视为“真实”文件夹,即在文件系统中创建它们并在我将它们在解决方案中移动到其中一个文件夹时将文件移动到其中?
编辑:谢谢。然后对VS2010提出建议:)
Answers:
没有特殊设置。我不支持。
您可以在解决方案内的“项目”中创建实际文件夹,但不能在解决方案本身中创建。
有一种变通方法,其行为实际上与预期的一样。
做完了 现在,解决方案资源管理器将反映文件系统中的任何更改,反之亦然(包括子文件夹)。
我将它用于团队中共享的规范,文档,PM和一些DevOps脚本。很容易选择,在源代码管理中包含或不包含什么,并且(如果设置正确)与构建不冲突。
我知道该功能不适合该用例,但除了可能引起误解的“项目”图标外,我还没有发现该hack的不足之处。在某些情况下,VS提供的经典(虚拟)解决方案文件夹也很适合。你怎么看?
.*proj
格式的解决方案类型。
在Visual Studio 2017中,单击“解决方案资源管理器”窗口中的“解决方案和文件夹”图标。此按钮从虚拟的“解决方案”视图切换到与文件系统上的文件夹和文件的布局匹配的“源视图”。当您添加新文件夹时,该文件夹将在预期的位置物理创建。 。
选择的答案表明可以使用实际项目而不是解决方案文件夹,但实际上并没有解释如何使用。我想我在这里描述的可能是实现该目标的最尴尬的方式... :-P
常规项目文件的问题在于它们最终将由编译MSBUILD
。而且,如果您想要一个仅包含不可编译文件的项目,那将是一个问题。
但是一段时间前,Visual Studio引入了一种新的项目类型:共享项目(扩展名为.shproj)。默认情况下,不会编译此项目类型,而仅在(且仅当)另一个项目引用该项目类型时才进行编译。
因此,这里技巧的一部分是使用共享项目而不是解决方案文件夹。很明显,可以添加一个从未被任何其他项目引用的共享项目,这意味着我们可以避免上面提到的问题。
然后,通过使用<None Include="**/*" />
.shproj文件中的子句,我们可以使其自动反映所有新文件和/或子文件夹。
所以基本上做到这一点:
例如,以我为例,我创建了一个DockerDev.shproj,因此我可以将一些仅在开发机器中运行的与Docker相关的脚本分组:
<?xml version="1.0" encoding="utf-8"?>
<!-- DockerDev/DockerDev.shproj -->
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<None Include="**/*" />
</ItemGroup>
</Project>
这.shproj文件将保持跟踪的任何文件,在任何新的子文件夹DockerDev
在我的解决方案文件夹。
据我所知,此解决方案的工作原理与OP所要求的非常相似:它将作为对文件夹的不可编译的引用工作,并且将自动反映对其所做的任何更改。
文件夹到解决方案文件夹通过CeciliaWirén-CeciliaSHARP
消除了将多个文件添加到解决方案文件夹的麻烦。只需使用解决方案的上下文菜单,然后在创建新解决方案文件夹的选项下面,您会发现“将文件夹添加为解决方案文件夹”。这将创建一个与您选择的名称相同的解决方案文件夹,并将该文件夹内的项目添加到解决方案文件夹。这不会移动磁盘上的文件。
Visual Studio不对此提供支持。我做了一个扩展,尽管它对VS2013做类似的事情。尽管映射是一种方式(从硬盘驱动器到解决方案),但它会将解决方案文件夹映射到硬盘驱动器上的物理文件夹。这意味着解决方案文件夹的内容将反映硬盘驱动器文件夹的内容,而不是其他方式。
顺便说一句,扩展可能仍然有用。它支持将解决方案文件夹映射到物理文件夹,基于正则表达式过滤文件和目录以及记住.sln文件中的映射。属性是非侵入性的,因此没有扩展名的开发人员仍然可以打开sln且不受影响。
托管在Visual Studio画廊上:https : //visualstudiogallery.msdn.microsoft.com/69e19ea6-4442-4cb6-b300-044dd21f02bd
编辑:上传到bitbucket。现在开源。MIT许可证。https://bitbucket.org/LSS_NorthWind/physical-solution-folders
注意:是的,您可以在root上创建一个文件夹,但是它的作用有点棘手...。
通过付出额外的努力,您可以做到如何?让我们按照以下步骤操作:
6.将存储库放在新位置。
你完成了...
如果仍然看不到您的文件夹-----
恭喜您完成了。
如果您遇到任何问题,请写信给我。
如上所述,在解决方案下创建的文件夹将是虚拟的。也许这可以称为解决方法,但是您可以在添加新项/项目之前或之时在磁盘上物理创建文件夹,Robert应该是您父亲的兄弟。
附:-仔细看看,也许我应该解释“鲍勃是你的叔叔”的意思是你的好/排序。
我本人曾几次希望使用此功能,但是最终,您真的不希望具有此功能。将解决方案(文件)视为Web应用程序的根,将解决方案文件夹视为虚拟目录(从字面上和功能上)。Web虚拟目录的内容可能在物理上完全位于其他服务器上。Visual Studio混淆了解决方案文件夹概念的地方是允许您在文件夹内创建新文件。您应该始终“添加现有内容”添加内容时,内容”。添加现有文件时,它会创建一个指向文件源位置的链接。
但是,由于您不希望解决方案文件夹表现得像“物理”文件夹那样,是因为您的解决方案布局不一定使用与源代码管理布局相同的约定。解决方案文件夹允许您自定义项目的层次结构,以便您可以按自己喜欢的方式将项目和项目组合在一起,然后确定自己不喜欢并再次进行更改,而不必经历移动源代码管理项目的噩梦到处打扰您团队的其他成员。
src
,test
,tools
,等你肯定会想使在项目一开始就认为决定你对点激怒团队,但这在大多数架构决策中都是如此。