Visual Studio Solutions文件夹作为真正的文件夹

时间:2008-11-05 23:54:44

标签: visual-studio

我有一个Visual Studio解决方案。目前,它是一个空的解决方案(=没有项目),我添加了一些解决方案文件夹。

解决方案文件夹似乎只是“虚拟文件夹”,因为它们并非真正在文件系统中创建,而解决方案文件夹中的文件只是与.sln文件位于同一文件夹中。

是否有一个我忽略的设置告诉Visual Studio将解决方案文件夹视为“真正的”文件夹,即在文件系统中创建它们并在我将其移入解决方案之一时将文件移入其中那些文件夹?

编辑:谢谢。然后对VS2010提出建议:)

17 个答案:

答案 0 :(得分:38)

无特殊设定。我认为它不受支持。

您可以在解决方案中的“项目”中创建真实文件夹,但不能在解决方案本身中创建。

答案 1 :(得分:34)

有一种解决方法,实际上可以按预期运行

  1. 向解决方案添加现有网站。 (我通常会创建一个新的。)
  2. 确保在解决方案文件夹中创建它。 (我有时甚至会创建一个外部文件夹的“链接”,例如网络共享上的“文档”或“营销”。在这种情况下,Git当然会忽略它。)
  3. 确保转到“项目”设置或配置管理器,以从构建和部署中排除此“网站”
  4. 完成。现在,解决方案资源管理器将反映文件系统中的任何更改,反之亦然(包括子文件夹)。

    我(小姐)将它用于规范,文档,PM和团队内共享的一些DevOps脚本。它很容易选择,包括在源代码控制中的内容,以及(如果设置正确)它与构建不冲突。

    我知道该功能不适用于该用例,但除了可能具有误导性的“Project”图标之外,我还没有发现该hack的任何短缺。并且仍然存在VS提供的经典(虚拟)解决方案文件夹的用例,适合图片。你觉得怎么样?

答案 2 :(得分:15)

在Visual Studio 2017中,单击"解决方案和文件夹" Solution Explorer窗口中的图标。此按钮可从虚拟"解决方案中切换。查看"源视图"与文件系统上的文件夹和文件的布局相匹配。添加新文件夹时,将在预期位置物理创建该文件夹。 solutions and folders

答案 3 :(得分:8)

Sara Ford贡献了一个宏来添加这样做。在Visual Studio 2010中,如果打开宏资源管理器,您将看到一个名为“GenerateSlnFolderOnDirStructure”的宏。这将自动创建解决方案文件夹并添加文件。

答案 4 :(得分:3)

不,它不受支持。如您所料,解决方案文件夹只是.sln文件中的虚拟子条目,与文件系统无关。

答案 5 :(得分:3)

选择的答案表明,可以使用实际项目代替解决方案文件夹,但并未真正说明如何使用。我想我在这里描述的可能是实现这些目标的最尴尬的方法::-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所要求的非常相似:它将作为对文件夹的不可编译的引用,并且会自动反映对其所做的任何更改。

答案 6 :(得分:3)

注意:是的,你可以在root上创建一个文件夹但是它有点棘手....

通过额外的努力你可以做到如何? 让我们按照步骤 -

  • 1 - 创建文件夹,例如:root上的“ newfolder ”(.sln文件所在的位置)。
  • 2.将项目复制并粘贴到文件夹中。
  • 3.转到您的sln文件并找到已移动的项目并在移动的项目地址中附加新文件夹。
  • 4.Save sln file。
  • 5.打开你的项目并在git中提交存储库......
  • 6.将存储库放在新的位置。

    你完成了......

如果您仍然无法看到您的文件夹-----

  • 1.添加解决方案文件夹xyz。
  • 2.打开sln文件并使用您的文件夹名称更改该文件夹名称。

恭喜你完成了..

如果您遇到任何问题,请写信寻求帮助..

答案 7 :(得分:3)

Folder To Solution Folder By Cecilia Wirén - CeciliaSHARP

删除将几个文件添加到解决方案文件夹的麻烦。只需使用解决方案的上下文菜单,然后在创建新解决方案文件夹的选项下方,您现在可以找到&#39;添加文件夹作为解决方案文件夹&#39;。这将创建一个与您选择的名称相同的解决方案文件夹,并将该文件夹内的项目添加到解决方案文件夹中。这不会移动磁盘上的文件。

答案 8 :(得分:2)

Visual Studio不支持此功能。我做了一个扩展,为VS2013做了类似的事情。它将解决方案文件夹映射到硬盘驱动器上的物理文件夹,但映射是一种方式(从硬盘驱动器到解决方案)。这意味着解决方案文件夹的内容将反映硬盘文件夹的内容,而不是其他方式。

除此之外,扩展可能仍然有用。 它支持将解决方案文件夹映射到物理文件夹,基于正则表达式过滤文件和目录,以及记住.sln文件中的映射。属性是非侵入性的,因此没有扩展的开发人员仍然可以打开sln而不会受到影响。

托管在visual studio gallery: https://visualstudiogallery.msdn.microsoft.com/69e19ea6-4442-4cb6-b300-044dd21f02bd

编辑:上传到bitbucket。现在开源。 MIT许可证。 https://bitbucket.org/LSS_NorthWind/physical-solution-folders

答案 9 :(得分:2)

我自己想要这个功能几次,但在一天结束时,你确实 NOT 希望能够做到这一点。将您的解决方案(文件)视为Web应用程序的根,并将解决方案文件夹视为虚拟目录(从字面上和功能上)。 Web虚拟目录的内容可以完全在不同的服务器上。 Visual Studio混乱的解决方案文件夹概念是允许您在文件夹中创建新文件。添加内容时,您应始终“添加现有”。添加现有内容时,会创建指向文件源位置的链接。

但是,您不希望解决方案文件夹的行为类似于“物理”文件夹,因为您的解决方案布局可能不一定使用与源控件布局相同的约定。解决方案文件夹允许您自定义项目的层次结构,以便您可以按照自己喜欢的方式将项目和项目组合在一起,然后决定您不喜欢它并再次更改它而无需经历移动源代码控制项目的噩梦围绕并激怒你团队的其他成员。

答案 10 :(得分:2)

然后创建一个空的解决方案 在编辑器中打开 .sln 文件 并将这些代码行放在 MinimumVisualStudioVersion

之后
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{9D8C3BB1-AEDB-4757-8559-995D12A4E6D0}"

在 vs 中打开解决方案,您应该向其中添加相同的文件夹 现在您可以看到该文件夹​​并向其中添加一个项目 你在 windows 中有一个真实的文件夹,在 vs 中有一个虚拟的文件夹

确保你 使用该路径创建项目

答案 11 :(得分:2)

对于 Visual Studio 2019 中的 C# 我使用这种方式 (Seems to be similar to this answer, but that didn't work at least in C# solutions)

  1. 在解决方案资源管理器中点击 switch views

enter image description here

  1. 选择folder view

enter image description here

  1. 您可以将单个文件夹添加到解决方案中

enter image description here

  1. 要返回到解决方案资源管理器的常规视图,只需再次点击 switch views 并选择解决方案。

使用这种方式似乎存在限制(来自@montonero 的评论):

<块引用>

... 只需打开一个包含多个项目的解决方案,然后尝试通过文件夹视图将项目移动到其他一些真实文件夹中。问题是 VS 不会更新解决方案文件中项目的路径

答案 12 :(得分:1)

创建“解决方案文件夹”。这将创建逻辑文件夹,但不是物理文件夹。 右键单击解决方案文件夹并打开一个新项目对话框。但在单击“确定”之前,您必须将项目位置更改为所需的物理文件夹,VS将创建它并将项目放入其中。

答案 13 :(得分:1)

您可以通过为Visual Studio项目文件选择“添加新过滤器”来添加实际文件夹。您还可以在现有文件夹下执行“添加新过滤器”。创建文件夹后,重命名该文件夹并添加源文件或头文件或适合您的项目。这是我知道的一种方式,它允许我们通过Visual Studio IDE创建真正的文件夹。

答案 14 :(得分:1)

在解决方案下创建的文件夹将是虚拟的,如上所述。也许这可能被称为解决方法,但您可以在添加新项目/项目之前或之后在磁盘上物理创建文件夹,而Robert应该是您父亲的兄弟。

ps-仔细看看也许我应该解释一下“鲍勃是你的叔叔”意味着你的罚款/分类。

答案 15 :(得分:1)

是的,项目可以在 Visual Studio 2019 中使用

虽然这是一个老话题,但我会补充我的答案,因为我遇到了同样的问题并寻找了解决方案,但似乎每个人都 100% 确定没有办法做到这一点。于是我开始尝试VS 2019,尝试了很多设置,最终找到了出路。

1 按钮 :D

您只需点击 1 个按钮 - Show All Files,您就会看到您的 Visual Studio 解决方案的物理结构:
VS 2019 - Show All Files Button

现在您可以将文件和文件夹添加到项目中,它们将(物理地)添加到文件系统中

右键单击您的项目 → AddNew Folder
请注意,选项从 New Filter 更改为 New Folder
VS 2019 Add Folder Menu

我对 C++ 的推荐

  1. 在项目目录中创建一个根文件夹,该文件夹将包含所有与应用程序相关的内容(代码、标题、数据、库...)。我将它命名为 Project
  2. 根据需要添加子文件夹来构建代码。我更喜欢以下 layoutincludesrcdatalibs

Recommended VS 2019 Project Structure

  1. 现在设置 Visual Studio 以将这些文件夹识别为标头和源目录。
    1. 在解决方案资源管理器中单击您的项目。请注意,就我而言,它是 CrazyDemo,而不是
      Solution 'CreazyDemo' (1 of 1 project)
    2. 转到项目属性菜单:ProjectProperties
    3. 打开Configuration PropertiesVC++ Directories标签
    4. 编辑Include Directories并设置为$(ProjectDir)/Project/include;$(IncludePath)
    5. 编辑Library Directories并设置为$(ProjectDir)/Project/libs;$(LibraryPath)
    6. 编辑Source Directories并设置为$(ProjectDir)/Project/src;$(SourcePath)

VS 2019 Recommended Project Properties

  1. 如果您想专注于 1 个项目,可以使用 Scope to This 选项。只需右键单击 Project 文件夹并按 Scope to This
    • 请注意,执行此操作后,要打开 Project Properties,您需要单击任何项​​目文件(例如示例中的 main.cpp),然后单击可编辑的客户区(例如您想更改代码),只有在此之后您才能看到
      ProjectCrazyDemo Properties 选项。 [Visual Studio 疯了?‍♂️]

最后,你可能有这样的项目

VS 2019 Recommended Project Example

答案 16 :(得分:0)

我对此有一些解决方法(它不是很好,但它有效)。

  1. 在解决方案中创建一个文件夹(即“Contoso”)
  2. 右键单击解决方案,然后单击“在解决方案资源管理器中打开文件夹”
  3. 在解决方案目录
  4. 中创建物理文件夹(即“Contoso”)
  5. 复制/创建物理文件夹中的文件。
  6. 将文件拖到解决方案资源管理器中的虚拟文件夹中。
  7. 这不是很好,因为您需要手动维护文件引用,但它适用于我。