Visual Studio项目中文件夹的“添加为链接”


127

在Visual Studio中,我们可以“添加为链接”将链接添加到解决方案中另一个项目中的文件。

有什么方法可以对整个文件夹执行此操作,从而使项目A中的整个文件夹在项目B中可见,而无需手动链接到该文件夹​​中的新项目吗?

Answers:


141

如本博客文章所述,这是可能的。

<ItemGroup>
    <Compile Include="any_abs_or_rel_path\**\*.*">
        <Link>%(RecursiveDir)%(FileName)%(Extension)</Link>
    </Compile>
</ItemGroup>

但是请注意,文件不会被复制。


18
+1。您还可以使用<Content ...>,并进行添加<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>以使Visual Studio复制生成的资源。
马库斯·贾德罗

8
尝试使用: <None>...</None>代替<Compile>...</Compile>。但是我认为,无论如何它都会复制这些文件。即使Visual Studio也会使用链接文件来执行此操作。
莫。

4
@mo。您的答案会添加指向项目根目录中所有文件的链接,有时很不方便。%(RecursiveDir)应该更改为某些链接文件夹名称:例如,从该解决方案中另一个项目的wp7项目'MyMainProject'链接源文件夹:<ItemGroup> <Compile Include =“ .. \ .. \ MyMainProject \ MyMainProject \ engine *。*“> <Link> engine \%(FileName)</ Link> </ Compile> </ ItemGroup>
Tertium

23
我不得不使用<Link>%(RecursiveDir)%(FileName)%(Extension)</Link>它来防止扩展名脱离文件名。
Joe Daley

2
对于图标Png资源:<EmbeddedResource Include =“ .. \ .. \ Icons \ 16 * .png”>
ChrisB

126

在VS2012及更高版本中,您可以按下Alt键将文件夹拖到另一个项目。就像手动将每个文件添加为链接一样,但是速度更快。

upd:如果您使用的是VS2013更新2(使用“ 共享项目参考管理器”)或VS2015,请考虑使用“ 共享项目”


1
在VS2010中,这样做将复制文件和目录,而不是将它们添加为链接,从而造成不必要的重复。
2014年

3
注意:必须从Windows资源管理器(不是Visual Studio的另一个实例)中拖动文件夹。此外,它必须是左键单击拖动,而不是右键单击拖动。在VS2012中效果很好。
davidpriceev

11
我认为它只是创建指向sources文件夹中每个文件的链接,而不是指向文件夹本身的链接。这意味着,如果将文件添加到源文件夹,则不会自动链接该文件。
–'Johnny5

1
@MauryMarkowitz,您应该从VS项目中拖动文件夹,而不是从Windows资源管理器中拖动文件夹。
mt_serg 2014年

1
@MauryMarkowitz,单个解决方案,两个项目。按住Alt键将Folder1从Project1拖到Project2。Project1 / Folder1中的每个文件将作为链接添加到Project2 / Folder1中。
mt_serg 2014年

37

除了 从莫答案。以及Marcus的评论,如果要链接内容项,则需要包括文件扩展名:

<ItemGroup>
  <Compile Include="any_abs_or_rel_path\**\*.*">
    <Link>%(RecursiveDir)%(FileName)%(Extension)</Link>
    <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
  </Compile>
</ItemGroup>

<Compile ...是什么 就我而言,我需要将.ts文件引用到我的新项目中。怎么做的。谢谢!
Rahmathullah M 2015年

23

关于在IDE中出现链接文件夹的原始查询部分,可以实现这一点,因此解决方案资源管理器中有一个文件夹,其中包含所有链接文件,而不是所有文件都出现在根目录下。解决方案。要实现此目的,请添加以下内容:

  <ItemGroup>
    <Compile Include="..\anypath\**\*.*">
      <Link>MyData\A\%(RecursiveDir)%(FileName)%(Extension)</Link>
    </Compile>
  </ItemGroup>

这会将链接目录中的所有文件包括在解决方案资源管理器名为MyData的新文件夹中。上面代码中的'A'可以被称为任何名称,但必须在其中才能使该文件夹出现。


它似乎可以解决问题,但不会将Form文件折叠为一个,并为其.resx文件提供了错误(我使用的是VB)。不管怎么说,还是要谢谢你。
伊万·费雷尔

1
@IvanFerrerVilla,是的,我注意到它存在一些问题,但在大多数情况下,仅对外观有益。
亚当

3
在Visual Studio 2015中,即使没有`A`,它也对我有用。
马丁

7

如果要添加文件夹作为参考并且不想对其进行编译,请使用:

<Content Include="any_path\**\*.*">
  <Link>folder_in_B_project\%(RecursiveDir)%(FileName)%(Extension)</Link>
</Content>

0

断开外壳并添加符号链接。

然后以runas Administrator身份运行

mklink /d LinkToDirectory DirectoryThatIsLinkedTo

BAM符号链接!

/ d指定目录链接。

即插即用,可在Vista中使用。可以反向移植到XP。

此处的文档:http : //technet.microsoft.com/zh-cn/library/cc753194%28WS.10%29.aspx

对于那些不熟悉符号链接的人,它实际上是指向另一个文件或目录的指针。它对应用程序是透明的。磁盘上的一份副本,有几种解决方法。您还可以创建一个“硬链接”,该链接不是指向另一个地址的指针,而是指向同一文件的NTFS中的实际文件ID条目。

注意:如注释中所述,这仅在创建符号链接的计算机上有效,而在git之类的版本控制系统中无效。


2
这仅对单个开发人员有用(除非编写脚本)。其他解决方案构成共享源代码的一部分,因此更加通用。
JRoughan 2014年

所询问的问题与共享源代码无关。就是说,msysgit不支持符号链接,所以太可惜了。
John Vance 2014年

1
这不是文件系统问题。还请注意,这种想法会在不同的源代码控制系统和备用转储系统中产生严重的副作用
g.pickardou 2014年

显然,我不允许编辑或删除问题。您的第一个反对意见很愚蠢。这个问题也不是一个明确的项目文件编辑问题,因此您也应该拒绝所有这些答案。记录了您的第二个反对意见,如果我可以编辑答案以添加该警告,则可以。
约翰·万斯2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.