【问题标题】:"Add as Link" for folders in Visual Studio projectsVisual Studio 项目中文件夹的“添加为链接”
【发布时间】:2010-08-31 15:58:33
【问题描述】:

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

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

【问题讨论】:

    标签: visual-studio visual-studio-2010 projects-and-solutions


    【解决方案1】:

    正如blogpost 所说,这是可能的。

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

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

    【讨论】:

    • +1。您也可以使用&lt;Content ...&gt;,并添加&lt;CopyToOutputDirectory&gt;PreserveNewest&lt;/CopyToOutputDirectory&gt; 以使Visual Studio 在构建时复制资源。
    • 尝试使用:&lt;None&gt;...&lt;/None&gt; 而不是&lt;Compile&gt;...&lt;/Compile&gt;。但我认为,无论如何它都会复制这些文件。甚至 VisualStudio 也可以使用链接文件。
    • @mo。您的答案添加了指向项目根目录中所有文件的链接,有时这很不方便。 %(RecursiveDir) 应更改为某个链接文件夹名称:例如,在此解决方案的另一个项目中链接来自 wp7 项目“MyMainProject”的源文件夹:engine\%(FileName)
    • 我不得不使用&lt;Link&gt;%(RecursiveDir)%(FileName)%(Extension)&lt;/Link&gt; 来防止它从文件名中删除扩展名。
    • 图标PNG资源:
    【解决方案2】:

    在 VS2012 及更高版本中,您可以按住 alt 键将文件夹拖到另一个项目中。这与手动将每个文件添加为链接相同,但速度更快。

    更新: 如果您使用的是 VS2013 更新 2(使用 Shared Project Reference Manager)或 VS2015,请考虑使用 Shared Projects。

    【讨论】:

    • 在 VS2010 中,这样做会复制文件和目录,而不是将它们添加为链接,从而创建不需要的重复项。
    • 注意:该文件夹必须从 Windows 资源管理器(而不是 Visual Studio 的另一个实例)中拖动。此外,它必须是左键拖动,而不是右键单击拖动。在 VS2012 中运行良好。
    • 我认为它只是创建指向源文件夹中每个文件的链接,而不是指向文件夹本身的链接。这意味着如果您将文件添加到源文件夹,它将不会自动链接。
    • 这正是我想要的。
    • 使用 Alt 拖动在 VS 2017(版本 15.4.1)中工作并节省了一天,因为他们从“添加现有文件”对话框中删除了“添加为链接”。不,它没有创建任何重复项。
    【解决方案3】:

    除了the answer from mo. 和 Marcus 的评论之外,如果您要链接内容项,则需要包含文件扩展名:

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

    【讨论】:

    • 这是什么&lt;Compile ...。就我而言,我需要将.ts 文件引用到我的新项目中。它是如何完成的。谢谢!
    【解决方案4】:

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

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

    这会将链接目录中的所有文件包含在解决方案资源管理器中名为 MyData 的新文件夹中。上面代码中的“A”可以被称为任何东西,但必须存在才能显示文件夹。

    【讨论】:

    • 它似乎可以解决问题,但不会将表单文件折叠成一个文件,并且会为其 .resx 文件提供错误(我使用的是 VB)。还是谢谢。
    • @IvanFerrerVilla,是的,它有一些我注意到的问题,但大部分只是为了美观。
    • 使用 Visual Studio 2015,即使没有 `A`,这对我也有用。
    【解决方案5】:

    如果你想添加一个文件夹作为参考并且你不想编译它,使用:

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

    【讨论】:

      【解决方案6】:

      破壳而出并添加一个符号链接。

      runas 管理员然后

      mklink /d LinkToDirectory DirectoryThatIsLinkedTo
      

      BAM 符号链接!

      /d 指定目录链接。

      在 Vista 中开箱即用。可以向后移植到 XP。

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

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

      注意:如 cmets 中所述,这仅适用于您创建符号链接的计算机,并且不适用于 git 等版本控制系统。

      【讨论】:

      • 这仅对单个开发人员有用(除非脚本化)。其他解决方案构成共享源代码的一部分,因此更普遍有用。
      • 所问的问题与共享源代码无关。也就是说,msysgit 不支持符号链接,所以很糟糕。
      • 这不是文件系统问题。另请注意,这个想法会在不同的源代码控制系统和备份资源系统中产生严重副作用
      • 显然我不允许编辑或删除我的问题。你的第一个反对意见是愚蠢的。该问题也不是明确的项目文件编辑问题,因此您也应该对所有这些答案投反对票。注意到您的第二个反对意见,如果我可以编辑我的答案以添加该警告,我会的。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-22
      • 2019-02-09
      • 2021-04-11
      相关资源
      最近更新 更多