Visual Studioプロジェクトのフォルダーの「リンクとして追加」


127

Visual Studioでは、「リンクとして追加」して、ソリューション内の別のプロジェクトのファイルへのリンクを追加できます。

フォルダ全体に対してこれを行う方法はありますか?そのため、プロジェクトAのフォルダ全体がプロジェクトBに表示され、そのフォルダの新しいアイテムに手動でリンクする必要はありませんか?

回答:


141

このブログポストが述べたように、それは可能です。

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

ただし、ファイルはコピーされないことに注意してください。


18
+1。を使用して<Content ...><CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>Visual Studioにビルド時にリソースをコピーさせることもできます。
Markus Jarderot、2012年

8
<None>...</None>代わりに使用してみてください <Compile>...</Compile>。しかし、私はそれがとにかくそれらのファイルをコピーすると思います.VisualStudioでさえ、リンクされたファイルでこれを行います。
mo。

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
Icon Pngリソースの場合:<EmbeddedResource Include = ".. \ .. \ Icons \ 16 * .png">
ChrisB

126

VS2012以降では、Altキーを押したままフォルダーを別のプロジェクトにドラッグできます。各ファイルをリンクとして手動で追加するのと同じですが、高速です。

upd:VS2013 update 2(Shared Project Reference Managerを使用)またはVS2015 を使用している場合は、共有プロジェクトの使用を検討してください。


1
VS2010では、これを行うと、ファイルおよびディレクトリがリンクとして追加されるのではなくコピーされ、不要な重複が作成されます。
Tom

3
注:フォルダーはWindowsエクスプローラーからドラッグする必要があります(Visual Studioの別のインスタンスではありません)。また、右クリックドラッグではなく、左クリックドラッグでなければなりません。VS2012でうまく機能します。
davidpricedev 2014年

11
フォルダー自体へのリンクではなく、sourcesフォルダー内のすべてのファイルへのリンクを作成するだけだと思います。つまり、ソースフォルダーにファイルを追加しても、自動的にリンクされません。
Johnny5、2014

1
@ MauryMarkowitz、Windowsエクスプローラーなどからではなく、VSプロジェクトからフォルダーをドラッグする必要があります。
mt_serg 2014

1
@MauryMarkowitz、単一のソリューション、2つのプロジェクト。Altキーを押しながら、Folder1をProject1からProject2にドラッグします。Project1 / Folder1からの各ファイルは、リンクとしてProject2 / Folder1に追加されます。
mt_serg 2014

37

moからの答えに 1つの追加Marcusからのコメント。コンテンツアイテムをリンクする場合は、ファイル拡張子を含める必要があります。

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

これ<Compile ...でどうだ。私の場合、.ts新しいプロジェクトにファイルを参照する必要があります。その方法。ありがとう!
Rahmathullah M

23

リンクされたフォルダーをIDEに表示する元のクエリの部分に関しては、これを達成することは一種の可能性があります。そのため、ソリューションエクスプローラー内に、すべてのファイルがルートに表示されるのではなく、すべてのリンクされたファイルが含まれるフォルダーがあります。ソリューション。これを実現するには、以下を追加します。

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

これには、MyDataと呼ばれるソリューションエクスプローラーの新しいフォルダーのリンクされたディレクトリからのすべてのファイルが含まれます。上記のコードの「A」は任意の名前で呼び出すことができますが、フォルダーを表示するためにはそこにある必要があります。


それはトリックを行うように見えますが、フォームファイルを1つに折りたたみません。また、.resxファイルにエラーを出します(私はVBを使用しています)。とにかくありがとう。
Ivan Ferrer Villa

1
@IvanFerrerVilla、はい、私が気づいたいくつかの問題がありますが、大部分は見た目だけに適しています。
アダム

3
Visual Studio 2015では、 `A`がなくてもこれはうまくいきました。
Martin

7

参照としてフォルダーを追加し、それをコンパイルしたくない場合は、以下を使用します。

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

0

シェルをバストアウトし、シンボリックリンクを追加します。

runas管理者

mklink /d LinkToDirectory DirectoryThatIsLinkedTo

BAMシンボリックリンク!

/ dは、ディレクトリリンクを指定します。

Vistaでそのまま使用できます。XPにバックポートできます。

ここにドキュメント:http : //technet.microsoft.com/en-us/library/cc753194%28WS.10%29.aspx

シンボリックリンクに慣れていない人にとっては、それは本質的に別のファイルまたはディレクトリへのポインタです。アプリケーションに対して透過的です。ディスク上の1つのコピー、それに対処するいくつかの方法。別のアドレスへのポインタではなく、同じファイルのNTFSの実際のファイルIDエントリである「ハードリンク」を作成することもできます。

注:コメントに記載されているように、これはシンボリックリンクを作成したコンピューターでのみ機能し、gitなどのバージョン管理システムでは機能しません。


2
これは、(スクリプト化されていない限り)1人の開発者にのみ役立ちます。他のソリューションは共有ソースコードの一部を形成するため、より一般的に役立ちます。
JRoughan 2014年

尋ねられた質問は、共有ソースコードに関するものではありませんでした。そうは言っても、msysgitはシンボリックリンクをサポートしていないので残念です。
John Vance

1
これはファイルシステムの問題ではありません。また、このアイデアは、さまざまなソース管理システムとバックアップリソーアシステムで深刻な副作用を引き起こすことに注意してください
g.pickardou

質問を編集または削除することはできません。あなたの最初の異論はばかげています。質問はまた、明示的にプロジェクトファイルを編集するための質問ではなかったので、それらすべての回答にも反対票を投じる必要があります。あなたの2番目の異論が指摘されています。もし私がその答えを編集してその警告を追加できれば、私はそうします。
John Vance
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.