问题很简单。我没有在Visual Studio中创建文件夹,而是在文件系统上为我的项目创建目录结构。如何在项目中包含所有文件夹和文件,保留结构?
如果我在名为Services的文件夹上“添加现有文件”并导航到目录结构中的文件..服务>帐户管理> CreateAccount.cs,它将显示在Visual Studio中,如下所示:Services> CreateAccount.cs。我不想这样。
我已经完成了整个目录结构,因为我模仿我们的客户端开发人员使用相同的组织结构。如何在Visual Studio中将所有文件夹和文件添加到项目中?或者我必须做大多数Microsoft用户所做的事情并“忍受它”并通过Visual Studio重新创建每个文件夹?
据我所知,在VS2010中执行此操作的唯一方法类似于拖放方法。右键单击要添加项目的解决方案。应用程序菜单将有一个add ...项目。打开它,您会发现其中一个选项是将现有项目添加到解决方案中。
在打开的对话框中,导航到包含解决方案的项目文件的文件夹,然后选择它。作为导入该项目文件的一部分,VS还将导入整个目录,并假设任何属于该项目的下级目录。
由于这确实需要现有的项目文件,因此在将树转换为项目之前导入目录树是不可能的。
我找不到满意的答案,所以我想出了自己。
如果您想要将外部源代码添加到项目中并且不想复制整个代码,这就是您的答案。我对其他gits有很多依赖,如果不是每分钟都会每小时更新一次。我不能每小时复制一次同步。这是你需要做的。
假设这是结构:
/根/ projA / SRC
/根/ projA /包括
/根/ projB / SRC
/根/ projB /包括
/根/ yourProj / SRC
/根/ yourProj /包括
有一点需要注意,如果有重复的包含/头文件,“头文件”中的“从项目中排除”并不真正起作用。这是VS中的一个错误。
Visual Studio 2017和更新版本支持新的轻量级.csproj
格式,后来被称为“SDK格式”。这种格式的几个优点之一是,默认情况下,文件包含通配符,而不是包含所包含的文件和文件夹列表。因此,使用这种新格式,您的文件和文件夹(在资源管理器或命令行中添加)将自动获取!
SDK格式.csproj
文件currently works with the following project types:
要使用新格式,请创建新的.NET Core或.NET Standard项目。由于即使在Visual Studio 2019中尚未针对完整的.NET Framework更新模板,因此要创建.NET类库,请选择.NET标准库模板,然后编辑项目文件以定位您选择的框架版本(可以在Visual Studio中编辑新样式项目格式 - 只需在解决方案资源管理器中右键单击该项目,然后选择“编辑项目文件”。例如:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net46</TargetFramework>
</PropertyGroup>
</Project>
进一步阅读:
您也可以将文件夹从Windows Explorer拖放到Visual Studio解决方案窗口中。
在Visual Studio 2015中,您就是这样做的。
如果要自动包含特定文件夹下的所有后代文件:
<Content Include="Path\To\Folder\**" />
这可以限制为仅包括指定路径中的文件:
<Content Include="Path\To\Folder\*.*" />
甚至只有具有指定扩展名的文件:
<Content Include="Path\To\Folder\*.jpg" >
参考:http://jamesrpatterson.com/blog/automatic-include-in-project-for-visual-studio
复制粘贴。
要添加文件夹,所有子目录和文件,我们还可以复制和粘贴。例如,我们可以:
您可以使用符号链接。这使得修改一个项目中的文件在另一个项目中修改它(因为它实际上是同一个文件)。
去做这个:
这有它的缺点和缺陷,但我偶尔会使用它来处理需要不同名称的重复库。
编辑Anoop:添加到Visual Studio的步骤:
这些是我遵循的步骤,适用于几个不同的项目。
要扩展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”我想要的是在我的Code文件夹下递归包含代码。
这是项目文件示例。
<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 Installer项目中部署一些数据文件,它似乎拿起包含的文件并保留它们的路径。