我有一个 Visual Studio 解决方案。目前,它是一个空解决方案(=没有项目),我添加了一些解决方案文件夹。
解决方案文件夹似乎只是“虚拟文件夹”,因为它们并没有真正在文件系统中创建,并且解决方案文件夹中的文件只是与 .sln 文件位于同一文件夹中。
是否有一个我忽略的设置告诉 Visual Studio 将解决方案文件夹视为“真实”文件夹,即在文件系统中创建它们并在我将解决方案中的文件移动到其中一个文件夹时将它们移动到其中?
编辑:谢谢。那就给VS2010提个建议吧:)
有一种解决方法,它实际上按预期运行。
将新网站或现有网站添加到解决方案。 (我通常创建一个新的。)只需确保它是在您的解决方案文件夹中创建的。 (有时我什至会创建一个指向外部文件夹的“链接”,例如网络共享上的“Docs”或“Marketing”。在这种情况下,Git 当然会忽略它。)确保转到“项目”设置或配置经理从构建和部署中排除这个“网站”!
完毕。现在解决方案资源管理器将反映文件系统中的任何更改,反之亦然(包括子文件夹)。
我(想念)将它用于团队内部共享的规范、文档、PM 和一些 DevOps 脚本。很容易选择,在源代码管理中包含或不包含什么,并且(如果设置正确)它不会与构建冲突。
我知道该功能不适用于该用例,但除了可能具有误导性的“项目”图标之外,我还没有发现该 hack 的任何不足之处。还有一些用例,其中 VS 提供的经典(虚拟)解决方案文件夹适合图片。你怎么看?
无特殊设置。我不认为它被支持。
您可以在解决方案的“项目”中创建真正的文件夹,但不能在解决方案本身中创建。
https://i.stack.imgur.com/k71Ve.png
选择的答案表明可以使用实际项目而不是解决方案文件夹,但并没有真正解释如何。我想我在这里描述的可能是实现这一目标的最不尴尬的方式...... :-P
常规项目文件的问题在于它们最终将由 MSBUILD
编译。如果你想要一个只包含不可编译文件的项目,那会是个问题。
但是前段时间 Visual Studio 引入了一种新的项目类型:共享项目(.shproj 扩展名)。默认情况下不会编译此项目类型,但仅当(且仅当)它被另一个项目引用时。
所以这里的技巧之一是使用共享项目而不是解决方案文件夹。显然可以添加一个从未被任何其他项目引用的共享项目,这意味着我们可以避免上述问题。
然后,通过在 .shproj 文件中使用 <None Include="**/*" />
子句,我们可以使其自动反映任何新文件和/或子文件夹。
所以基本上这样做:
在您的解决方案中创建一个新文件夹。
在这个新文件夹的根目录下添加一个新的 .shproj 文件。
在您的解决方案中引用新的 .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
文件夹的 any 子文件夹中的 any 文件。
据我所知,这个解决方案的工作原理与 OP 所要求的非常相似:它将作为对文件夹的不可编译引用,并且会自动反映对其所做的任何更改。
Sara Ford 贡献了一个宏来添加这样做。在 Visual Studio 2010 中,如果您打开宏资源管理器,您将看到一个名为“GenerateSlnFolderOnDirStructure”的宏。这将自动创建解决方案文件夹并添加文件。
Folder To Solution Folder By 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
创建“解决方案文件夹”。这将创建逻辑文件夹,但不是物理文件夹。右键单击解决方案文件夹并打开一个新项目对话框。但在单击“确定”之前,您必须将项目位置更改为所需的物理文件夹,VS 将创建它并将项目放入其中。
对于 Visual Studio 2019 中的 C#,我使用了这种方式 (Seems to be similar to this answer, but that didn't work at least in C# solutions)
在解决方案资源管理器中单击切换视图
https://i.stack.imgur.com/H9D1W.png
选择文件夹视图
https://i.stack.imgur.com/mOhT3.png
您可以将单个文件夹添加到解决方案
https://i.stack.imgur.com/VPCKE.png
要返回解决方案资源管理器的常规视图,只需再次单击切换视图并选择解决方案。
使用这种方式似乎有一个限制(来自@montonero 的评论):
...只需打开一个包含多个项目的解决方案,然后尝试通过文件夹视图将项目移动到其他一些真实文件夹。问题是 VS 不会更新解决方案文件中项目的路径
我自己也想要这个功能几次,但归根结底,你真的不希望有能力做到这一点。将您的解决方案(文件)视为 Web 应用程序的根,并将解决方案文件夹视为虚拟目录(从字面上和功能上)。 Web 虚拟目录的内容可能在物理上完全位于不同的服务器上。 Visual Studio 混淆解决方案文件夹概念的地方是允许您在文件夹中创建新文件。添加内容时,您应该始终“添加现有”。添加现有文件时,它会创建指向文件源位置的链接。
但是,您不希望解决方案文件夹表现得像“物理”文件夹的原因是因为您的解决方案布局可能不一定使用与源代码管理布局相同的约定。解决方案文件夹允许您自定义项目的层次结构,以便您可以以任何您喜欢的方式将项目和项目组合在一起,然后决定您不喜欢它并再次更改它,而不必经历移动源代码管理项目的噩梦周围并激怒团队的其他成员。
src
、test
、tools
等类别。您肯定想要在项目一开始就做出这个决定来激怒团队,但大多数架构决策都是如此。
注意:是的,您可以在根目录上创建一个文件夹,但它有点棘手......
通过付出一些额外的努力,你可以做到如何?让我们按照步骤——
1-创建文件夹,例如:根目录上的“newfolder”(您的 .sln 文件所在的位置)。
2.将您的项目复制并粘贴到文件夹中。
3.转到您的 sln 文件并找到已移动的项目并将 newfolder\ 添加到已移动项目的地址中。
4.保存sln文件。
5.打开您的项目并在git中提交存储库...
6.将存储库放在新位置。你完成了...
如果您仍然看不到您的文件夹 -----
1.添加解决方案文件夹xyz。
2.打开 sln 文件并用您的文件夹名称更改该文件夹名称。
恭喜你完成了。。
如果您遇到任何问题,请写信给我寻求帮助..
创建一个空解决方案,然后在编辑器中打开 .sln 文件并将这些代码行放在 MinimumVisualStudioVersion 之后
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{9D8C3BB1-AEDB-4757-8559-995D12A4E6D0}"
在 vs 中打开解决方案,您应该向其中添加相同的文件夹,现在您可以看到该文件夹并向其中添加一个项目,您在 windows 中有一个真实文件夹,在 vs 中有一个虚拟文件夹
确保您使用该路径创建了项目
您可以通过为 Visual Studio 项目文件选择“添加新过滤器”来添加真实文件夹。您还可以在现有文件夹下执行“添加新过滤器”。创建文件夹后,将其重命名并添加源文件或头文件或任何适合您项目的文件。这是我知道的一种方法,它可以让我们通过 Visual Studio IDE 创建真正的文件夹。
如前所述,在解决方案下创建的文件夹将是虚拟的。也许这可能被称为一种解决方法,但您可以在添加新项目/项目之前或当您添加新项目/项目时在磁盘上物理创建文件夹,并且罗伯特应该是您父亲的兄弟姐妹。
ps-仔细看看也许我应该解释一下“鲍勃是你的叔叔”的意思是你的罚款/分类。
我对此有一些解决方法(它不是很好,但它有效)。
在您的解决方案中创建一个文件夹(即“Contoso”) 右键单击解决方案,然后单击“在解决方案资源管理器中打开文件夹” 在解决方案目录中创建物理文件夹(即“Contoso”) 在物理文件夹中复制/创建文件。将文件拖到解决方案资源管理器中的虚拟文件夹中。
这不是很好,因为您需要手动维护文件引用,但它对我有用。
是的,该项目可以在 Visual Studio 2019 中使用
虽然这是一个老话题,但我会添加我的答案,因为我遇到了同样的问题并搜索了解决方案,但似乎每个人都 100% 确定没有办法做到这一点。于是我开始尝试VS 2019,尝试了很多设置,最终找到了出路。
1 个按钮:D
https://i.stack.imgur.com/6ExuW.png
现在您可以将文件和文件夹添加到项目中,它们将被添加到文件系统(物理上)
https://i.stack.imgur.com/yhJG4.png
我对 C++ 的推荐
在项目目录中创建一个根文件夹,其中将包含所有与应用程序相关的内容(代码、标题、数据、库...)。我将它命名为 Project Add subfolders,因为您想构建代码。我更喜欢以下布局:include、src、data、libs 等
https://i.stack.imgur.com/jlbJZ.png
现在设置 Visual Studio 以将这些文件夹识别为标头和源目录。在解决方案资源管理器中单击您的项目。请注意,在我的情况下,它是 CrazyDemo,而不是解决方案“CreazyDemo”(1 个项目中的 1 个) 转到项目属性菜单:项目→属性打开配置属性→VC++ 目录选项卡编辑包含目录并设置为 $(ProjectDir)/ Project/include;$(IncludePath) 编辑库目录并设置为 $(ProjectDir)/Project/libs;$(LibraryPath) 编辑源目录并设置为 $(ProjectDir)/Project/src;$(SourcePath)
https://i.stack.imgur.com/lNXNQ.png
如果您想专注于 1 个项目,您可以使用 Scope to This 选项。只需右键单击项目文件夹并按 Scope to This 注意,在此操作之后,为了打开项目属性,您需要单击任何项目文件(如示例中的 main.cpp),然后单击可编辑的客户区(比如当你想改变代码时),只有在那之后你才能看到 Project→CrazyDemo Properties 选项。 [Visual Studio 疯了🤦♂️]
最后,你可能有这样的项目
https://i.stack.imgur.com/B7NGL.png
.*proj
格式的解决方案类型。