Visual Studioのプロジェクトに既存のディレクトリツリーを追加するにはどうすればよいですか?


824

問題は本当に簡単です。Visual Studioでフォルダーを作成する代わりに、ファイルシステムにプロジェクトのディレクトリ構造を作成します。構造を維持しながら、プロジェクトにすべてのフォルダとファイルを含めるにはどうすればよいですか?

Servicesという名前のフォルダーに「既存のファイルを追加」し、ディレクトリ構造.. Services> AccountManagement> CreateAccount.csのファイルに移動すると、Visual Studioに次のように表示されます。Services> CreateAccount.cs。これいらない。

組織に同じ構造を使用しているクライアント開発者を模倣しているため、ディレクトリ構造全体がすでに完成しています。Visual Studioでプロジェクトにすべてのフォルダーとファイルを追加するにはどうすればよいですか?それとも、ほとんどのMicrosoftユーザーが行うことを実行し、「それに我慢」して、Visual Studioを介してすべてのフォルダーを再作成する必要がありますか?



回答:


1438

ディレクトリ構造をプロジェクトディレクトリに配置する必要があります。次に、ソリューションエクスプローラーツールボックスの上部にある[すべてのファイルを表示]アイコンをクリックします。その後、追加したディレクトリが表示されます。次に、このディレクトリを選択して右クリックし、[プロジェクトに含める]を選択する必要があります。

ここに画像の説明を入力してください

ここに画像の説明を入力してください


150
プロジェクトディレクトリ外のディレクトリ(ツリー)これを行う方法はありますか?
11

2
プロジェクトがあるサブディレクトリではないフォルダーに対してこれを行う方法はありますか?つまり、E:\ ProjectX \ project.vcprojにフォルダE:\ Common * .csを含めますか?
Matt Connolly、

4
ほとんど動作します。ディレクトリツリーを表示して複数のファイルを追加できますが、サブツリーを含むディレクトリ全体を追加できません。
ManicBlowfish

5
問題は、Windowsエクスプローラーを使用してVisualプロジェクトのディレクトリツリーをコピーした場合にのみ機能することです。コンピューターの他のプロジェクトに含まれているいくつかのフォルダーとファイルを参照したいだけの場合はどうすればよいですか?
hico 2013

5
プロジェクトの外でこれを行う方法を知っている唯一の方法は、シンボリックリンクを使用することです...私の回答を参照してください:stackoverflow.com/a/26537736/835561
Edyn

77

WindowsエクスプローラーからVisual Studioソリューションウィンドウにフォルダーをドラッグアンドドロップすることもできます。


14
これは、Vista Ultimate 64ビットでのVS 2010のインストールでは機能しません。
ジョンメルビル

13
いいえ、Windows 7でのVS 2010インストールでも機能しません。
AH。

9
これがVS 2010(非管理者モード)でも機能しないことの確認
David Gardiner

9
君たちが正しくやっているとは思わない。VS 2010はフォルダーのドラッグアンドドロップをサポートしています。私はいつもツールキットを含めるようにしています。プロジェクトツリーにドロップすることを確認する必要があります。ソリューションパネルとソリューションノード自体はドロップを受け取りません。ここではOSは無関係ですが、疑わしい人にはWindows 7 64ビットを使用しています。
ギャビンウィリアムズ

4
「ソリューションアイテム」は、プロジェクトへのアイテムの追加とは異なります。ソリューションアイテムは、VSソリューション内の特別なフォルダーです。
Todd Smith、

53

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


3
これは、個々のファイルすべてに注釈を付ける必要がなく(「承認された回答」の場合のように)、「コピーは常にビルド時に」単一のタグを含めることができるため、これが役に立ちました
Gordon Bean

3
IMOは、ここで最も役立つ回答の1つです。
シンジャイ

それはどこに追加されますか?どのようにしてVSでXMLビューにアクセスしますか?
マシューディーン

1
これは、Visual Studioが応答せずにハングアップする間に大きな階層フォルダーを追加する場合に最適なソリューションです。
Gowtham Alan、

1
Microsoft VSチームの残念な点
dejjub-AIS

33

コピー&ペースト

フォルダ、すべてのサブディレクトリ、およびファイルを追加するには、コピーして貼り付けることもできます。たとえば、次のことができます。

  1. Windowsエクスプローラーでフォルダーを右クリックし、多数のファイルとフォルダーが含まれているフォルダーで[コピー]をクリックします。

  2. 次に、Visual Studioソリューションエクスプローラーで、宛先フォルダーを右クリックし、[貼り付け]をクリックします。

  3. TFSへのオプションの追加。次に、一番上のフォルダーを右クリックしてTFSにチェックインし、すべてのサブフォルダーとファイルをチェックインします。


これは私にとってはうまくいきましたが、ドラッグアンドドロップはVS14とWindows 10 proでは機能しませんでした。
モナジャラル2017年

1
管理者としてVSを実行している場合を除き、ドラッグアンドドロップは機能しない可能性があります
RThomas

18

シンボリックリンクを使用できます。これにより、1つのプロジェクトでファイルを変更すると、別のプロジェクトでファイルが変更されます(実際には同じファイルであるため)。

これをする:

  1. 管理者としてcmdプロンプトを開く
  2. mklink / d [現在のプロジェクトディレクトリ名] [ポイントする他のプロジェクトのディレクトリ]

これには欠点と落とし穴がありますが、異なる名前を必要とする重複したライブラリに時々使用します。

Anoopの編集:Visual Studioに追加する手順:

  1. 上記の手順を使用して、プロジェクトフォルダにリンクを作成します。
  2. Visual Studioで...ソリューションエクスプローラーでプロジェクトを選択します。
  3. ソリューションエクスプローラーの上部にある[すべてのファイルを表示]ボタンをクリックします(既にアクティブになっている場合は、2回クリックする必要がある場合があります)。
  4. リンクがプロジェクトに表示されます...右クリックして、[プロジェクトに含める]を選択します。

これらは私が従うステップであり、いくつかの異なるプロジェクトで機能します。


動かない!シンボリックリンクがフォルダーとして認識されない
Anoop K. Prabhu

1
@Anoop:この方法の使用方法を示す手順を追加しました。ぜひお試しください。
Edyn、2014

1
その働き!コマンドプロンプトを使用する代わりに、フォルダーを右クリックしてショートカットを作成しようとしていたため、機能しませんでした。上記の手順に従って問題を修正しました。ありがとう
Anoop K. Prabhu

1
注:mklinkはFATファイルシステムでは機能しません。NTFS用です。
エイドリアン

ソース管理は、シンボリックリンクによって大混乱を引き起こします。Gitには管理者権限が必要か、ファイルをチェックインするだけです。
CADが2016年

13

Visual Studio 2017では、ソリューションビューフォルダービューを交互に切り替えます。ソリューションをよりクリーンに保つため、これはより良いオプションだと思います。これを使用して、.gitignore、.mdファイルなどを編集します。

ソリューションビューとフォルダービュー


5
問題は、単にフォルダーを表示するだけでなく、既存のフォルダーをソリューションに追加する方法です。
CShark

1
これは、実際の構造を確認したり、ファイルエクスプローラーなどでフォルダーを開いたりするのに最適なオプションですが、残念ながら、フォルダービューから既存のフォルダーツリーを追加することはできません。これは、ガントが説明したように、ソリューションビューでのみ可能です。
Matt

12

Yuchenの回答をさらに詳しく説明するために、ファイルとパスをリンクとして含めることができます。これは、プロジェクトのフォルダー構造に余分なコピーを作成しないため、既存のアイテムを追加することとは異なります。1つの正規のフォルダ/ファイルなどをさまざまな場所で使用したいが、バージョン/コピーを1つだけ維持したい場合に便利です。

これは*.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およびその他の回答とリンクを参照してください

MSBuildの詳細については、https: //msdn.microsoft.com/en-us/library/bb629388.aspxをご覧ください。


2
これが答えになるはずです!
Jurijs Kastanovs、2018

4

Compile Include = "。\ Code ***。cs"を使用してこれを行う方法を見つけたと思います。コードフォルダーの下に再帰的にコードを含めることです。

これがプロジェクトファイルのサンプルです。

<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>

2

Visual Studio 2013では、フォルダーを右クリックしたときに[プロジェクトに含める]が機能しませんでした。機能したのは、フォルダーを展開し、すべてのファイルを選択して、[プロジェクトに含める]を選択することです。各フォルダーを1つずつ実行する必要があります(ただし、少なくとも各フォルダー内のすべてのファイルを一度に実行できます)。ファイルパスを格納しているように見えます(ファイルのプロパティを表示すると確認できます)そして「相対パス」オプションを見てください。

これを使用して、Visual Studio Installerプロジェクトの一部のデータファイルを展開したいと考えています。これにより、含まれているファイルが取得され、そのパスが保持されるようです。


0

私の知る限り、VS2010でこれを行う唯一の方法は、ドラッグアンドドロップメソッドに似ています。プロジェクトを追加するソリューションを右クリックします。アプリケーションメニューには、追加...項目があります。それを開くと、オプションの1つは既存のプロジェクトをソリューションに追加することです。

開いたダイアログボックスで、ソリューションのプロジェクトファイルを含むフォルダーに移動し、それを選択します。VSは、そのプロジェクトファイルのインポートの一部として、ディレクトリ全体もインポートします。また、そのプロジェクトの一部であるすべての下位ディレクトリを想定しています。

これには既存のプロジェクトファイルが必要なので、ディレクトリツリーをプロジェクトに変換するまで、そのツリーをインポートすることは不可能ではありません。


0

満足のいく答えが見つからなかったので、自分で考え出した。

プロジェクトに外部ソースコードを追加し、コード全体をコピーしたくない場合の答えは次のとおりです。私は他のGitに多くの依存関係があり、それらは1分ごとではなくても1時間ごとに更新されます。同期するために1時間ごとにコピーすることはできません。これがあなたがしなければならないことです。

これが構造であると仮定します:

/ root / projA / src

/ root / projA / includes

/ root / projB / src

/ root / projB / includes

/ root / yourProj / src

/ root / yourProj / includes

  1. VSソリューションを開始します。
  2. ソリューションのすぐ下にあるプロジェクト名を右クリックします。
  3. 次に、「追加」、「新規フィルター」をクリックし、projAに「projA」という名前を付けます。
  4. 「projA」を右クリックし、「追加」、「新規フィルター」、名前「src」を入力します
  5. 「projA」を右クリックし、「追加」、「新規フィルター」をクリックし、名前「includes」を入力します
  6. 「projA」/「src」を右クリックし、「追加」、「既存のアイテム」をクリックしてから、/ root / projA / srcを参照して、すべてのソースコードを追加するか、必要なソースコードを1つずつ追加します。
  7. 「projA」/「includes」にも同じことを行う
  8. projBについても同じようにします。これで、あなたの外部の外部/既存のプロジェクトがソリューション/プロジェクトに存在します。VSはそれらを一緒にコンパイルします。ここにトリックがあります。projAとprojBはプロジェクトの仮想フォルダーであるため、コンパイラーはprojA / includesを見つけられない場合があります。

  9. projA / includesが見つからない場合は、プロジェクトを右クリックして、[プロパティ]を選択します。

  10. 「C / C ++」に移動します。「追加のインクルードディレクトリ」を編集し、projA / includeを「../projA/includes」などの相対パスとして追加します。

1つの警告、重複したインクルード/ヘッダーファイルがある場合、「ヘッダーファイル」の「プロジェクトから除外」は実際には機能しません。これはVSのバグです。


0

Visual Studio 2017以降.csprojでは、「SDK形式」と呼ばれるようになった新しい軽量形式がサポートされています。この形式のいくつかの利点の1つは、含まれるファイルとフォルダーのリストを含める代わりに、ファイルがデフォルトでワイルドカードで含まれることです。したがって、この新しい形式では、エクスプローラーまたはコマンドラインで追加されたファイルとフォルダーが自動的に取得されます。

SDK形式.csprojファイルは現在、次のプロジェクトタイプで動作します

  • クラスライブラリプロジェクト

  • コンソールアプリ

  • ASP.NET Core Webアプリ

  • あらゆるタイプの.NET Coreプロジェクト

新しい形式を使用するには、新しい.NET Coreプロジェクトまたは.NET Standardプロジェクトを作成します。テンプレートはVisual Studio 2019でも完全な.NET Framework用に更新されていないため、.NETクラスライブラリを作成するには、.NET標準ライブラリテンプレートを選択し、プロジェクトファイルを編集して、選択したフレームワークバージョンをターゲットにします(新しいスタイルのプロジェクト形式はVisual Studio内で編集できます-ソリューションエクスプローラーでプロジェクトを右クリックし、[プロジェクトファイルの編集]を選択します)。例えば:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>net46</TargetFramework>
  </PropertyGroup>
</Project>

参考文献:

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.