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

kpo*_*zin 123 projects-and-solutions visual-studio-2010 visual-studio

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

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

mo.*_*mo. 136

正如这篇博文所述,这是可能的.

<ItemGroup>
    <Compile Include="any_abs_or_rel_path\**\*.*">
        <Link>%(RecursiveDir)%(FileName)%(Extension)</Link>
    </Compile>
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)

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

  • 我不得不使用`<Link>%(RecursiveDir)%(FileName)%(Extension)</ Link>`来防止它从文件名中删除扩展名. (23认同)
  • +1.您还可以使用`<Content ...>`,并添加`<CopyToOutputDirectory> PreserveNewest </ CopyToOutputDirectory>`以使Visual Studio在构建时复制资源. (17认同)
  • 尝试使用:`<None> ... </ None>`而不是`<Compile> ... </ Compile>`.但我想,无论如何它都会复制这些文件.即使VisualStudio也会使用链接文件. (8认同)
  • @mo.您的答案会添加指向项目根目录中所有文件的链接,有时会很不方便.%(RecursiveDir)应该更改为某个链接文件夹名称:例如,在此解决方案的另一个项目中链接来自wp7项目'MyMainProject'的源文件夹:<ItemGroup> <Compile Include ="..\..\MyMainProject\MyMainProject\engine\*.*"> <Link> engine \%(FileName)</ Link> </ Compile> </ ItemGroup> (4认同)
  • 对于Icon Png资源:<EmbeddedResource Include ="..\..\Icons\16\*.png"> (2认同)

mt_*_*erg 125

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

upd:如果您使用的是VS2013 update 2(带共享项目参考管理器)或VS2015,请考虑使用共享项目.

  • 我认为它只是创建指向sources文件夹中每个文件的链接,而不是指向文件夹本身的链接.这意味着如果您将文件添加到源文件夹,它将不会自动链接. (11认同)
  • 注意:必须从Windows资源管理器(不是Visual Studio的另一个实例)拖动该文件夹.此外,它必须是左键单击拖动,而不是右键单击拖动.在VS2012中运行良好. (3认同)

小智 35

来自mo的答案的一个补充.以及Marcus的评论,如果您要链接内容项,则需要包含文件扩展名:

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

对不起,额外的答案,我没有足够的声誉来添加评论.


Ada*_*dam 22

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

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

这将包括解决方案资源管理器中名为MyData的新文件夹中链接目录中的所有文件.上面代码中的"A"可以被调用,但必须在那里才能显示文件夹.

  • 使用Visual Studio 2015,即使没有"A",这对我也有用. (3认同)

Nes*_*hta 7

如果要添加文件夹作为参考,并且您不想编译它,请使用:

<Content Include="any_path\**\*.*">
  <Link>folder_in_B_project\%(RecursiveDir)%(FileName)%(Extension)</Link>
</Content>
Run Code Online (Sandbox Code Playgroud)