我有一个 Visual Studio 解决方案。目前,它是一个空解决方案(=没有项目),我添加了一些解决方案文件夹。
解决方案文件夹似乎只是“虚拟文件夹”,因为它们并不是真正在文件系统中创建的,解决方案文件夹中的文件只是与 .sln 文件位于同一文件夹中。
是否有一个我忽略的设置告诉 Visual Studio 将解决方案文件夹视为“真实”文件夹,即在文件系统中创建它们并在我将解决方案中的文件移动到其中一个文件夹时将文件移动到其中?
编辑:谢谢。那就给VS2010提个建议吧:)
我有一个 Visual Studio 解决方案。目前,它是一个空解决方案(=没有项目),我添加了一些解决方案文件夹。
解决方案文件夹似乎只是“虚拟文件夹”,因为它们并不是真正在文件系统中创建的,解决方案文件夹中的文件只是与 .sln 文件位于同一文件夹中。
是否有一个我忽略的设置告诉 Visual Studio 将解决方案文件夹视为“真实”文件夹,即在文件系统中创建它们并在我将解决方案中的文件移动到其中一个文件夹时将文件移动到其中?
编辑:谢谢。那就给VS2010提个建议吧:)
有一种解决方法,它实际上按预期运行。
完毕。现在解决方案资源管理器将反映文件系统中的任何更改,反之亦然(包括子文件夹)。
我(想念)将它用于团队内部共享的规范、文档、PM 和一些 DevOps 脚本。很容易选择,在源代码管理中包含或不包含什么,并且(如果设置正确)它不会与构建冲突。
我知道该功能不适用于该用例,但除了可能具有误导性的“项目”图标之外,我还没有发现该 hack 的任何不足之处。还有一些用例,其中 VS 提供的经典(虚拟)解决方案文件夹适合图片。你怎么看?
无特殊设置。我不认为它被支持。
您可以在解决方案的“项目”中创建真正的文件夹,但不能在解决方案本身中创建。
选择的答案表明可以使用实际项目而不是解决方案文件夹,但并没有真正解释如何。我想我在这里描述的可能是实现这一目标的最不尴尬的方式...... :-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 所要求的非常相似:它将作为对文件夹的不可编译引用,并且会自动反映对其所做的任何更改。
Sara Ford 贡献了一个宏来添加这样做。在 Visual Studio 2010 中,如果您打开宏资源管理器,您将看到一个名为“GenerateSlnFolderOnDirStructure”的宏。这将自动创建解决方案文件夹并添加文件。
Cecilia Wirén 的文件夹到解决方案文件夹 - CeciliaSHARP
消除将多个文件添加到解决方案文件夹的麻烦。只需使用解决方案的上下文菜单,然后在创建新解决方案文件夹的选项下方,您现在可以找到“将文件夹添加为解决方案文件夹”。这将创建一个与您选择的名称相同的解决方案文件夹,并将该文件夹内的项目添加到解决方案文件夹中。这不会移动磁盘上的文件。
不,不支持。正如您所怀疑的,解决方案文件夹只是 .sln 文件中的虚拟子条目,与文件系统无关。
您可以同步新的解决方案文件夹嵌套级别,也可以使用实际的文件系统文件夹命名,它就像一个魅力!
Visual Studio 对此不提供支持。我做了一个扩展,它对 VS2013 做了类似的事情。它将解决方案文件夹映射到硬盘驱动器上的物理文件夹,尽管映射是一种方式(从硬盘驱动器到解决方案)。这意味着解决方案文件夹的内容将反映硬盘驱动器文件夹的内容,而不是相反。
有了这个,扩展可能仍然有用。它支持将解决方案文件夹映射到物理文件夹、基于正则表达式过滤文件和目录以及记住 .sln 文件中的映射。属性是非侵入性的,因此没有扩展的开发人员仍然可以打开 sln 而不会受到影响。
托管在视觉工作室画廊: https ://visualstudiogallery.msdn.microsoft.com/69e19ea6-4442-4cb6-b300-044dd21f02bd
编辑:上传到 bitbucket。现在开源。麻省理工学院许可证。https://bitbucket.org/LSS_NorthWind/physical-solution-folders
注意:是的,您可以在根目录上创建一个文件夹,但它有点棘手......
通过付出一些额外的努力,你可以做到如何?让我们按照步骤——
6.将存储库放在新位置。
你完成了...
如果您仍然看不到您的文件夹 -----
恭喜你完成了。。
如果您遇到任何问题,请写信给我寻求帮助..
创建“解决方案文件夹”。这将创建逻辑文件夹,但不是物理文件夹。右键单击解决方案文件夹并打开一个新项目对话框。但在单击“确定”之前,您必须将项目位置更改为所需的物理文件夹,VS 将创建它并将项目放入其中。
对于Visual Studio 2019 中的 C#,我使用了这种方式(似乎与此答案相似,但至少在 C# 解决方案中不起作用)
switch viewsfolder viewswitch views再次单击并选择解决方案。...只需打开一个包含多个项目的解决方案,然后尝试通过文件夹视图将项目移动到其他一些真实文件夹。问题是 VS 不会更新解决方案文件中项目的路径
我自己也想要这个功能几次,但归根结底,你真的不希望有能力做到这一点。将您的解决方案(文件)视为 Web 应用程序的根,并将解决方案文件夹视为虚拟目录(从字面上和功能上)。Web 虚拟目录的内容可能在物理上完全位于不同的服务器上。Visual Studio 混淆解决方案文件夹概念的地方是允许您在文件夹中创建新文件。添加内容时,您应该始终“添加现有”。添加现有文件时,它会创建指向文件源位置的链接。
但是,您不希望解决方案文件夹表现得像“物理”文件夹的原因是因为您的解决方案布局可能不一定使用与源代码管理布局相同的约定。解决方案文件夹允许您自定义项目的层次结构,以便您可以以任何您喜欢的方式将项目和项目组合在一起,然后决定您不喜欢它并再次更改它,而不必经历移动源代码管理项目的噩梦周围并激怒团队的其他成员。
创建一个空解决方案,然后在编辑器中打开 .sln 文件并将这些代码行放在MinimumVisualStudioVersion之后
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{9D8C3BB1-AEDB-4757-8559-995D12A4E6D0}"
在 vs 中打开解决方案,您应该向其中添加相同的文件夹,现在您可以看到该文件夹并向其中添加一个项目,您在 windows 中有一个真实文件夹,在 vs 中有一个虚拟文件夹
确保您使用该路径创建了项目
您可以通过为 Visual Studio 项目文件选择“添加新过滤器”来添加真实文件夹。您还可以在现有文件夹下执行“添加新过滤器”。创建文件夹后,将其重命名并添加源文件或头文件或任何适合您项目的文件。这是我知道的一种方法,它可以让我们通过 Visual Studio IDE 创建真正的文件夹。
如前所述,在解决方案下创建的文件夹将是虚拟的。也许这可能被称为一种解决方法,但您可以在添加新项目/项目之前或当您添加新项目/项目时在磁盘上物理创建文件夹,并且罗伯特应该是您父亲的兄弟姐妹。
ps-仔细看看也许我应该解释一下“鲍勃是你的叔叔”的意思是你的罚款/分类。
我对此有一些解决方法(它不是很好,但它有效)。
这不是很好,因为您需要手动维护文件引用,但它对我有用。
虽然这是一个老话题,但我会添加我的答案,因为我遇到了同样的问题并搜索了解决方案,但似乎每个人都 100% 确定没有办法做到这一点。于是我开始尝试VS 2019,尝试了很多设置,最终找到了出路。
您只需单击1 个按钮 - Show All Files,您将看到您的 Visual Studio 解决方案的物理结构:

右键单击您的项目 → Add→New Folder
请注意,该选项已更改New Filter为New Folder

Projectinclude、、、、src等datalibsCrazyDemo,而不是Solution 'CreazyDemo' (1 of 1 project)Project→<code>PropertiesConfiguration Properties→<code>VC++ 目录选项卡Include Directories并设置为$(ProjectDir)/Project/include;$(IncludePath)Library Directories并设置为$(ProjectDir)/Project/libs;$(LibraryPath)Source Directories并设置为$(ProjectDir)/Project/src;$(SourcePath)Scope to This如果您想专注于 1 个项目,您可以使用该选项。只需右键单击Project文件夹并按Scope to This
Project Properties,您需要单击任何项目文件(如main.cpp示例中),然后单击可编辑的客户区(如您要更改代码时),然后才可以将能够看到Project→<code>CrazyDemo 属性选项。[Visual Studio 疯了 ♂️]