这个问题真的很简单。我没有在 Visual Studio 中创建文件夹,而是在文件系统上为我的项目创建了一个目录结构。如何在项目中包含所有文件夹和文件,保持结构?
如果我在名为 Services 的文件夹上“添加现有文件”并导航到目录结构中的文件 ..Services > AccountManagement > CreateAccount.cs,它在 Visual Studio 中显示如下:Services > CreateAccount.cs。我不想要这个。
我已经制定了一个完整的目录结构,因为我正在模仿我们的客户开发人员使用相同的组织结构。如何在 Visual Studio 中将所有文件夹和文件添加到项目中?还是我必须做大多数 Microsoft 用户所做的事情并“忍受它”并通过 Visual Studio 重新创建每个文件夹?
您需要将目录结构放在项目目录中。然后单击解决方案资源管理器工具箱顶部的“显示所有文件”图标。之后,将显示添加的目录。然后,您需要选择此目录,右键单击并选择“包含在项目中”。
https://i.stack.imgur.com/ub2DI.png
https://i.stack.imgur.com/oIDP1.png
您还可以将文件夹从 Windows Explorer 拖放到您的 Visual Studio 解决方案窗口中。
在 Visual Studio 2015 中,您就是这样做的。
如果要自动包含特定文件夹下的所有后代文件:
<Content Include="Path\To\Folder\**" />
这可以限制为仅包含指定路径中的文件:
<Content Include="Path\To\Folder\*.*" />
甚至只有具有指定扩展名的文件:
<Content Include="Path\To\Folder\*.jpg" >
.csproj
文件。例如,Product.Feature.Web.csproj
。您需要添加类似 `<ItemGroup><Content Include="Path\To\Folder**" /></ItemGroup> 之类的内容。
复制粘贴。
要添加文件夹、所有子目录和文件,我们还可以复制和粘贴。例如我们可以:
右键单击文件夹上的 Windows 资源管理器,然后复制包含许多文件和文件夹的文件夹。然后在 Visual Studio 解决方案资源管理器中,右键单击目标文件夹并单击粘贴。可选添加到 TFS;然后在顶部文件夹中右键单击并签入 TFS 以签入所有子文件夹和文件。
您可以使用符号链接。这使得在一个项目中修改文件会在另一个项目中修改它(因为它实际上是同一个文件)。
去做这个:
以管理员身份打开 cmd 提示 mklink /d [当前项目目录名称] [它应该指向的其他项目中的目录]
这有它的缺点和陷阱,但我有时将它用于需要不同名称的重复库。
编辑 Anoop:添加到 Visual Studio 的步骤:
使用上述步骤在项目文件夹中创建链接。在 Visual Studio... 中选择解决方案资源管理器中的项目。在解决方案资源管理器的顶部...单击显示所有文件按钮(如果已激活,可能需要单击两次)。该链接现在将显示在您的项目中...右键单击并选择包含在项目中。
这些是我遵循的步骤,适用于几个不同的项目。
在 Visual Studio 2017 中,您可以在解决方案视图和文件夹视图之间来回切换。我认为这是一个更好的选择,因为它将使解决方案保持清洁。我用它来编辑 .gitignore、.md 文件等。
https://i.stack.imgur.com/P5tSD.png
要扩展 Yuchen's answer,您可以包含文件和路径作为链接。这与添加现有项目不同,因为它不会在项目的文件夹结构中创建额外的副本。如果您希望在许多不同的地方使用一个规范的文件夹/文件等,但您只想维护它的一个版本/副本,这将很有用。
以下是您可以添加到 *.csproj
文件以创建链接的示例
<Compile Include="$(Codez)\z.Libraries\Common\Strings\RegexExtensions.cs">
<Link>Helpers\RegexExtensions.cs</Link>
</Compile>
<Compile Include="..\..\z.Libraries\MoreLINQ\MoreLinq\ExceptBy.cs">
<Link>Helpers\ExceptBy.cs</Link>
</Compile>
<Content Include="C:\Codez\Libs\Folder\OtherFolder\**\*.*">
<Link>%(RecursiveDir)%(Filename)%(Extension)</Link>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
$(Codez)
是我定义的 Windows 环境变量,你可以同样的方式使用内置的环境变量。
最后一个示例组是我在最终输出中需要的一堆内容文件。请参阅 https://stackoverflow.com/a/11808911/492 和其他答案 &那里的链接以获取更多信息。
https://msdn.microsoft.com/en-us/library/bb629388.aspx 上的更多 MSBuild 信息
我想我找到了一种方法来使用 Compile Include=".\Code***.cs" 我想要的是在我的代码文件夹下递归地包含代码。
这是项目文件示例。
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="15.0" DefaultTargets="BuildTarget">
<PropertyGroup>
<OutputType>Library</OutputType>
</PropertyGroup>
<PropertyGroup>
<StartupObject />
</PropertyGroup>
<PropertyGroup>
<RootNamespace>Autogen</RootNamespace>
</PropertyGroup>
<ItemGroup>
<Compile Remove="@(Compile)" />
<Compile Include=".\Code\**\*.cs" />
</ItemGroup>
<Target Name="BuildTarget">
<Message Text="Build selected" Importance="high"/>
</Target>
</Project>
在 Visual Studio 2013 中,右键单击文件夹时无法让“包含在项目中”工作。起作用的是扩展文件夹,选择所有文件,然后选择“包含在项目中”。这很繁琐,因为您必须一个一个地处理每个文件夹(但至少您可以一次完成每个文件夹中的所有文件),并且它似乎存储了文件路径(您可以通过查看文件的属性来查看并查看“相对路径”选项。)
我希望使用它在 Visual Studio 安装程序项目中部署一些数据文件,它似乎可以拾取包含的文件并保留它们的路径。
Visual Studio 2017 和更新版本支持一种新的轻量级 .csproj
格式,该格式已被称为“SDK 格式”。这种格式的几个优点之一是,文件不是包含包含的文件和文件夹列表,而是默认包含通配符。 因此,使用这种新格式,您在资源管理器中或命令行中添加的文件和文件夹将被自动拾取!
SDK 格式 .csproj
文件 currently works with the following project types:
类库项目
控制台应用
ASP.NET Core Web 应用
任何类型的 .NET Core 项目
要使用新格式,请创建一个新的 .NET Core 或 .NET Standard 项目。因为即使在 Visual Studio 2019 中也没有针对完整的 .NET Framework 更新模板,所以要创建 .NET 类库,请选择 .NET Standard Library 模板,然后编辑项目文件以定位您选择的框架版本(可以在 Visual Studio 中编辑新样式的项目格式 - 只需在解决方案资源管理器中右键单击项目并选择“编辑项目文件”)。例如:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net46</TargetFramework>
</PropertyGroup>
</Project>
进一步阅读:
旧 csproj 到新 csproj:Visual Studio 2017 升级指南
揭开 SDK 项目的神秘面纱
MSDN:.NET Core 的 csproj 格式的补充
我没有找到令我满意的答案,所以我自己想通了。
如果您想将外部源代码添加到您的项目并且不想复制整个代码,这就是您的答案。我对其他 git 有很多依赖,它们每小时更新一次,如果不是每分钟更新一次。我不能每小时复制一次来同步。这是您需要做的。
假设这是结构:
/root/projA/src
/root/projA/包括
/root/projB/src
/root/projB/包括
/root/yourProj/src
/root/yourProj/包括
启动您的 VS 解决方案。右键单击解决方案正下方的项目名称。然后点击“添加”,“新建过滤器”,把名字“projA”换成projA。右键单击“projA”,单击“添加”,“新建过滤器”,输入名称“src” 右键单击“projA”,单击“添加”,“新建过滤器”,输入名称“includes”右键-单击“projA”/“src”,单击“添加”,“现有项目”,然后浏览到 /root/projA/src 以添加所有源代码或一一添加您想要的源代码。对“projA”/“includes”执行相同操作对 projB 执行相同操作。现在,您的解决方案/项目中存在您之外的外部/现有项目。 VS 会将它们编译在一起。这是一个技巧。由于 projA 和 projB 是您项目下的虚拟文件夹,因此编译器可能找不到 projA/includes。如果没有找到 projA/includes,则右键单击项目,选择“属性”。导航到“C/C++”。编辑“其他包含目录”,添加您的 projA/include,例如“../projA/includes”,相对路径。
一个警告,如果有重复的包含/头文件,“头文件”上的“从项目中排除”实际上不起作用。这是VS中的一个错误。
据我所知,在 VS2010 中执行此操作的唯一方法类似于拖放方法。右键单击要添加项目的解决方案。应用程序菜单将有一个添加 ... 项。打开它,您会发现其中一个选项是将现有项目添加到解决方案中。
在打开的对话框中,导航到包含解决方案项目文件的文件夹并选择它。作为导入该项目文件的一部分,VS 还将导入整个目录,并且我假设任何属于该项目的从属目录。
由于这确实需要一个现有的项目文件,因此在将目录树转换为项目之前,导入目录树是不可能的。
不定期副业成功案例分享