実際のフォルダーとしてのVisual Studio Solutions Folder


119

Visual Studioソリューションがあります。現在、それは空のソリューション(=プロジェクトなし)であり、いくつかのソリューションフォルダーを追加しています。

ソリューションフォルダーは「仮想フォルダー」のように見えるだけです。なぜなら、それらは実際にはファイルシステムで作成されておらず、ソリューションフォルダー内のファイルは.slnファイルと同じフォルダーに置かれているだけだからです。

ソリューションフォルダーを「実際の」フォルダーとして扱うようにVisual Studioに指示する、見落としている設定はありますか?つまり、ファイルシステムでフォルダーを作成し、ソリューション内のファイルをそれらのフォルダーの1つに移動すると、そこにファイルを移動します。

編集:ありがとう。それからVS2010の提案をするつもりです:)


52
これは、最も煩わしいVisual Studioの癖の1つです
アンディホワイト

この癖を正しく処理するにはどうすればよいですか?
hellboy '19

面白いことに、Riderにはこの機能があります(ただし、フォルダーは.slnファイルと同じパスにある必要があり、実際のフォルダー参照は.slnファイル自体に格納されていません):jetbrains.com/help/rider/Extending_Your_Solution。 html
rsenna

私はVS 2017を使用していますが、私の知る限り、MSはフォルダー全体をソリューションフォルダーに追加できる機能をまだ追加していません。個別のファイルを追加する必要があります。
Theo

回答:


43

特別な設定はありません。サポートされているとは思いません。

ソリューション内の「プロジェクト」に実際のフォルダーを作成できますが、ソリューション自体には作成できません。


1
これはまだVS 2017のように正確であるように思われる
テオ

2
...およびVS 2019
whymatter

VSについて最悪のことの1つ。MSがSlnフォルダーをオプションとして保持しないのはなぜですか。ただし、ソリューションにREALフォルダーを追加することもできます。とても迷惑。ファイルシステムは機能しますが、ホイールを(四角形として)再発明する理由は何ですか。
MemeDeveloper

46

実際に期待どおりに動作する回避策があります。

  1. 新規または既存のWebサイトをソリューションに追加します。(私は通常、新しいものを作成します。)
  2. ソリューションフォルダー内に作成されていることを確認してください。(ネットワーク共有で「Docs」や「Marketing」などの外部フォルダーへの「リンク」を作成することもあります。その場合はもちろんGitによって無視されます。)
  3. 「プロジェクト」設定または構成マネージャーに移動して、この「Webサイト」をビルドおよびデプロイから除外してください。

できました。これで、ソリューションエクスプローラーはファイルシステムの変更を反映し、その逆も同様です(サブフォルダーを含む)。

チーム内で共有されている仕様、ドキュメント、PM、および一部のDevOpsスクリプトに使用します。選択は簡単で、ソース管理に含めるものかどうか、そして(正しく設定されていれば)ビルドと競合しません。

この機能はそのユースケースを対象としていないことはわかっていますが、誤解を招く可能性のある「プロジェクト」アイコンを除いて、このハックの不足はまだ見つかりませんでした。そして、VSが提供する従来の(仮想)ソリューションフォルダーが全体像に適合するユースケースがまだあります。どう思いますか?


4
完全な手順は次のとおりです:ソリューションを右クリック-> [追加]-> [新しいWebサイト...]->(「ASP.NET空のWebサイト」を選択しました)。場所を変更した後、パスに「\ MyName」を追加することを忘れないでください。そうでない場合は、「OK」をクリックするとダイアログが再び開きます。その後、ソリューションを右クリックし、[プロパティ]-> [構成プロパティ]-> Webプロジェクトの[ビルド]をオフにします。
user764754 2016

これはまだ機能していますか?VS2015を使用していますが、機能しません。
Jan Paolo Go

VS2017では、実際のフォルダーは完全に作成されますが、ソリューションエクスプローラーにWebSiteアイコン(黒丸)が表示されます。誰かがそれを修正する方法を知っていますか?
Andrei Karcheuski 2017

はい、それはVS2019で機能しますが、ファイルシステムの変更を監視しません。現在のファイルを表示するには、ときどき「更新」する必要があります。C#プロジェクトだけが、新しく、より明確で、より明確なファイルシステムグローバルベースの.*proj形式をサポートする唯一のソリューションタイプではなかった場合。
シャノン

32

Visual Studio 2017で、ソリューションエクスプローラーウィンドウの[ソリューションとフォルダー]アイコンをクリックします。このボタンは、仮想「ソリューション」ビューから、ファイルシステム上のフォルダーおよびファイルのレイアウトに一致する「ソースビュー」に切り替えます。新しいフォルダを追加すると、そのフォルダは予想される場所に物理的に作成されます。 ソリューションとフォルダー


これは便利ですが、「ソースビュー」では、プロジェクトのすべての右クリックショートカット、つまり「Manage NuGet Packages」を失いました。
David Liang

1
C ++ソリューションまたはプロジェクトのみが他の言語と比較して異なる動作をするのはなぜですか?
フレンドリーゴースト

これは私を助けてくれたので、フォルダービューでフォルダーを作成し、ソリューションフォルダーを追加して、プロジェクトをフォルダーの子として追加しました。本当に私には意味がありませんが、この答えが私を助けてくれました
hanzolo

これがまさに私が欲しいものです。ありがとう!
user1633272

10

選択した回答は、ソリューションフォルダーの代わりに実際のプロジェクトを使用することが可能であることを示唆していますが、実際にはその方法を説明していません。私がここで説明しているのは、それを達成するためのおそらく最も不便な方法ではないと思います... :-P

通常のプロジェクトファイルの問題は、最終的にによってコンパイルされることMSBUILDです。また、コンパイル不可能なファイルのみを含むプロジェクトが必要な場合は、それ問題になります。

しかし、少し前に、Visual Studioは新しいプロジェクトタイプ、Shared Project(.shproj拡張子)を導入しました。このプロジェクトタイプはデフォルトではコンパイルされませが、別のプロジェクトによって参照されている場合(およびその場合のみ)にコンパイルされます。

したがって、ここでの秘訣の1つは、ソリューションフォルダの代わりに共有プロジェクト使用することです。他のプロジェクトから参照されない共有プロジェクトを追加することは明らかに可能です。つまり、上記の問題を回避できます。

次に、<None Include="**/*" />.shprojファイルの句を使用することで、新しいファイルやサブフォルダーを自動的に反映させることができます。

だから基本的にこれを行います:

  • ソリューションに新しいフォルダーを作成します。
  • この新しいフォルダのルートに新しい.shprojファイルを追加します。
  • ソリューションで新しい.shprojを参照します。

たとえば、私の場合は、DockerDev.shprojを作成したので、開発マシンでのみ実行するdocker関連のスクリプトをグループ化できます。

<?xml version="1.0" encoding="utf-8"?>
<!-- DockerDev/DockerDev.shproj -->
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <ItemGroup>
    <None Include="**/*" />
  </ItemGroup>
</Project>

この.shprojファイルはを追跡します任意のでは、ファイルの任意この新しいのサブフォルダDockerDev私の溶液中のフォルダ。

私の知る限り、このソリューションはOPが要求したものとほぼ同じように機能します。フォルダーへのコンパイルできない参照として機能し、フォルダーに加えられた変更を自動的に反映します。


私の経験では、疑いを持たないチームメンバーがファイルのプロパティに触れるとすぐに、これはくずを蓄積します。その後、ナビゲーションペインに重複したファイルが表示されます。いくつかの状況下では、すべてのファイルが.projファイルに列挙されてしまい、醜さが続きます。私はあきらめたくないのですが、それでも「既存のWebサイトを追加する」アプローチを好みます。
シャノン

@shannon私があなたが言及している行動を経験したことはありませんが、「証拠の不在は不在の証拠ではない」ので、それがあります。しかし、私は日常的に共有プロジェクトを使用しているので、それも重要だと思います。Webサイトプロジェクト(WSP)に関しては、それらも機能する可能性があると思います。
rsenna

8

サラ・フォードはこれを追加するためにマクロを提供しました。Visual Studio 2010では、マクロエクスプローラーを開くと、「GenerateSlnFolderOnDirStructure」というマクロが表示されます。これにより、ソリューションフォルダーの作成が自動化され、ファイルが追加されます。


5

フォルダーからソリューションフォルダーへCeciliaWirén-CeciliaSHARP

複数のファイルをソリューションフォルダーに追加する手間を省きます。ソリューションのコンテキストメニューを使用するだけで、新しいソリューションフォルダーを作成するオプションのすぐ下に、「フォルダーをソリューションフォルダーとして追加」が見つかります。これにより、選択した名前と同じ名前のソリューションフォルダーが作成され、そのフォルダー内のアイテムがソリューションフォルダーに追加されます。これはディスク上のファイルを移動しません。


3

いいえ、サポートされていません。ご想像のとおり、ソリューションフォルダーは.slnファイル内の単なる仮想サブエントリーであり、ファイルシステムとは関係ありません。


3

Visual Studioはこれをサポートしていません。VS2013でも同様の拡張を行いました。マッピングは一方向ですが(ハードドライブからソリューションへ)、ソリューションフォルダーをハードドライブ上の物理フォルダーにマップします。つまり、ソリューションフォルダーの内容はハードドライブフォルダーの内容を反映し、その他の方法では反映されません。

それが邪魔にならない場合でも、拡張機能はまだ便利です。ソリューションフォルダーの物理フォルダーへのマッピング、正規表現に基づくファイルとディレクトリのフィルター、および.slnファイル内のマッピングの記憶をサポートしています。プロパティは非侵入型であるため、拡張機能のない開発者は引き続きslnを開くことができ、影響を受けません。

ビジュアルスタジオギャラリーでホスト:https : //visualstudiogallery.msdn.microsoft.com/69e19ea6-4442-4cb6-b​​300-044dd21f02bd

編集:bitbucketにアップロードされました。オープンソースになりました。MITライセンス。https://bitbucket.org/LSS_NorthWind/physical-solution-folders


3

注:はい、これは可能です。ルートにフォルダを作成できますが、少しトリッキーです...

いくつかの追加の努力をすることによって、あなたはそれをどのように行うことができますか?ステップに従ってみましょう-

  • 1-Create Folder例:ルート上の「newfolder」(.slnファイルが存在する場所)。
  • 2.プロジェクトをコピーしてフォルダー内に貼り付けます。
  • 3. slnファイルに移動し、移動したプロジェクトを見つけて、移動したプロジェクトのアドレスにnewfolder \を追加します。
  • 4. slnファイルを保存します。
  • 5.プロジェクトを開いて、gitなどでリポジトリをコミットします...
  • 6.リポジトリを新しい場所に置きます。

    あなたは終わりました...

それでもフォルダが表示されない場合-----

  • 1.ソリューションフォルダーxyzを追加します。
  • 2. slnファイルを開き、そのフォルダー名を自分のフォルダー名に変更します。

おめでとうございます。

問題が発生した場合は、私に助けを求めてください。


3

「ソリューションフォルダ」を作成します。これにより、論理フォルダーは作成されますが、物理フォルダーは作成されません。ソリューションフォルダーを右クリックして、新しいプロジェクトダイアログを開きます。ただし、[OK]をクリックする前に、プロジェクトの場所を目的の物理フォルダーに変更する必要があります。VSによって作成され、プロジェクトが内部に配置されます。


1

Visual Studioプロジェクトファイルの[新しいフィルターを追加]を選択して、実際のフォルダーを追加できます。既存のフォルダの下で「新しいフィルタを追加」することもできます。フォルダーが作成されたら、名前を変更し、ソースファイルまたはヘッダーファイル、またはプロジェクトに適したものを追加します。これは、Visual Studio IDEを使用して実際のフォルダーを作成できる方法の1つです。


この機能はC ++プロジェクトに固有です。
Tamir Daniely、2015年

このソリューションはVSプロジェクトにも適用されます-問題はソリューションレベルのフォルダーに関するものです。
Theo

0

ソリューションの下に作成されたフォルダーは、前述のように仮想になります。多分これは回避策と呼ばれるかもしれませんが、新しいアイテム/プロジェクトを追加する前または追加するときにディスクにフォルダを物理的に作成でき、ロバートはあなたのお父さんの兄弟であるはずです。

PS-よく見ると、「ボブはあなたの叔父」はあなたの罰金/分類されたものを意味します。


ロバートがあなたの母親の兄弟であるかどうかは重要ですか?
ダレルリー2016

0

私はこの機能を自分でも何度か欲しかったのですが、結局のところ、これを実行する機能は望んでいません。ソリューション(ファイル)をWebアプリケーションのルートと見なし、ソリューションフォルダーを仮想ディレクトリ(文字通りおよび機能的に)と見なします。Web仮想ディレクトリのコンテンツは、物理的に完全に別のサーバー上にある可能性があります。Visual Studioがソリューションフォルダーの概念を混乱させたのは、フォルダー内に新しいファイルを作成できるようにすることです。コンテンツを追加するときは、常に「既存のものを追加」する必要があります。既存のものを追加すると、ファイルのソースの場所へのリンクが作成されます。

しかし、ソリューションフォルダーを「物理」フォルダーのように動作させたくない理由は、ソリューションレイアウトがソース管理レイアウトと同じ規則を必ずしも使用していない可能性があるためです。ソリューションフォルダーを使用すると、プロジェクトの階層をカスタマイズして、プロジェクトとアイテムを任意の方法でグループ化し、ソース管理アイテムを移動するという悪夢に煩わされることなく、好きではなく、変更することができます。周りのあなたのチームの残りを苛立たせます。


1
これが正解です。ディスク上のファイルを仮想フォルダーと同じ名前のフォルダーに作成し、「既存のものを追加」を使用してVSにファイルを追加します。
Richard

4
仮想フォルダと物理フォルダの両方を簡単に実装できたはずです。それは明らかに見落としです。参照:他のすべてのIDEを参照してください。
Tamir Daniely、2015年

6
(IIS)仮想ディレクトリの概念がソリューションフォルダーと関係がある理由がまったくわかりません。ソース管理の引数に関しては、私は問題を見ません。ファイルの移動がチームの他のメンバーを苛立たせるのはなぜですか?これは一般的な操作です。また、なぜソース管理のファイルのレイアウトを物理的なレイアウトとは異なるものにしたいのでしょうか。
user247702

2
物理的なソリューションフォルダは、それが(少しだけあるが)簡単にのような近代的なフォルダ構造を作成することになるだろうNancyFxの複数のプロジェクトが好きなカテゴリに分類され、srctesttools、などあなたは間違いについてのあなたのポイントに、プロジェクトの開始時にその決定をしたいと思いますチームを苛立たせますが、それはほとんどすべてのアーキテクチャ上の決定に当てはまります。
エリックエスキルセン2017

3
-1私のユースケースはこれです。特定のドキュメントをソリューションに追加したい場合があります。これらはビルドされませんが、ソース管理に保持されます。通常、私たちはそれらのための特別なフォルダを持っています。私のソリューションにそのフォルダー含めたい-それが含むファイルではなく、フォルダー自体。はい、この制限を回避する方法はいくつかありますが、最適ではありません。ソリューション内のフォルダーへの実際の参照があると、簡単に機能します。
rsenna

0

これには少し回避策があります(それは素晴らしいことではありませんが、うまくいきます)。

  1. ソリューションにフォルダーを作成します(例: "Contoso")
  2. ソリューションを右クリックして、[ソリューションエクスプローラーでフォルダーを開く]をクリックします。
  3. ソリューションディレクトリに物理フォルダー(つまり、「Contoso」)を作成します。
  4. 物理フォルダにファイルをコピー/作成します。
  5. ファイルをソリューションエクスプローラーの仮想フォルダーにドラッグします。

ファイル参照を手動で維持する必要があるので、それは素晴らしいことではありませんが、私にとってはうまくいきます。

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