単一のVisual Studioソリューション内の複数のアプリケーション[終了]


17

私は、すべての.Netアプリケーション(Webアプリケーション、Windowsアプリケーション、およびコンソールアプリケーション)を単一のVisual Studioソリューションに統合したい会社で仕事をしています。

この方法で独自のアプリケーションを構築する開発者、またはこれを行う会社で働く開発者の経験を探しています。これはいい考えですか?

  • アプリケーションごとに個別のソリューションを用意するのではなく、すべてのアプリケーションを単一のソリューションに入れることの長所と短所は何ですか?

  • Visual Studioは20以上のプロジェクトのソリューションを使用してどのくらいの速度ですか?

  • また、ソース管理された同時開発を使用したソリューションファイルはどの程度安定していますか?


回答はVisual Studioの特定のバージョンに固有のものである可能性があることに注意してください。
stakx 14年

回答:


21

最近、会社のほぼすべてのソースコードを単一のソリューションに移行しました。

どうして?

もともと、私たちは何十ものソリューションを持っていました。ソリューションのプロジェクトの中には、別のプロジェクトのプロジェクトを再利用するものがあり、パッケージマネージャーの使用を気にする人はいませんでした。ほぼすべての場所で使用されているプロジェクトを大幅に変更した日は、数日または数時間の会社全体の仕事が数日または数週間失われることを期待しています。最悪の部分は、あなたも知ることができないということであるものを正確に変更によって影響を受けるであろう。

すべてのコードを1つのソリューションにマージすることは代替手段でした。現時点ではうまく機能しており、依存関係を簡単に追跡できます。メソッドを変更するだけでなく、この変更がコードベースのどこにでも持つ可能性のある影響を追跡したいですか?Visual Studioはこれを簡単に行うことができます。私にとっては、成功です。

継続的な統合も簡単になりました。コンパイルおよびデプロイする1つのソリューション。設定するものはほとんどありません。

スケーラブルですか?

パフォーマンスに関しては、Visual Studioに非常に驚きました。たとえば、50のプロジェクトを含むソリューションで泣き出そうと思いました。今日、200以上のプロジェクトがあります。Visual Studioは、20個しかないかのように管理するのに十分な拡張性があるように見えました。はい、時間がかかることがあります。コードコントラクト、デフォルトで有効になっているコード分析などを使用してすべてのプロジェクトを再コンパイルする場合、しばらく時間がかかると予想されます。しかし、10個ほどの速さで200個のプロジェクトをコンパイルすることを期待する人はいません。起動時間(コールドスタート、ソリューションの読み込み)は非常に高速です。10個のプロジェクトほど高速ではないかもしれませんが、それでも十分に受け入れられます(5年以上前に購入したマシンで20秒未満)。

さらに進むには、プロジェクトを体系的にアンロードすることをお勧めします(プロジェクトがソリューション内のディレクトリに編成されている場合は非常に簡単です)。誰かが3つのプロジェクトのロードのみを必要とする作業を行う場合、200のプロジェクトすべてをロードする必要はありません(もちろん、依存関係が影響を受けない限り)。

バージョン管理も期待どおりに機能します(問題があればSVNサーバーを使用しています)。私は実際のコンカレント環境で作業したことはありません。たとえば、数十人の開発者が頻繁にコードをコミットしていますが、これで問題が多くなることはないと思います。多くの開発者が同時に新しいプロジェクトを追加する場合に注意してください。.slnファイルをマージするのは簡単なことではありません。

結論

再度決定を行わなければならなかった場合:

  1. それでもすべてを単一のソリューションに移行します。これにより、依存関係の破損による痛みが大幅に軽減され、このメリットだけでも十分に価値があります。すべてのコードを一元化することも良い考えです。これにより、たとえばVisual Studio内で何かを検索できます。また、2つの弱く関連するプロジェクトで作業することもできますが、まだ1つのVisual Studioウィンドウしか開いていません。

  2. また、もう少しNuGetとプライベートNuGetサーバーをホストする機能についても勉強します。NuGetを使用して依存関係を管理すると、いくつかのプロジェクトを共通ソリューションにマージしたくない場合の問題の一部を解決できます。個人的には、そのようなケースはありませんでしたが、他の企業が持っているかもしれないと思います。

  3. 最後に、すべての開発者のためにSSDに投資すると、大きな違いが生まれます。ただし、その必要はありません。私の場合、コードベースは通常のハードドライブに保存されています。


2
参考までに:速度/パフォーマンスが問題になる場合は、VSの.csprojファイルを使用してプロジェクトを開くこともできます。NuGetの「プライベートサーバー」は単なるネットワークフォルダーです(VSのパッケージソースの場所としてそのフォルダーを追加します)-そこにnupkgファイルをドロップするだけで機能します。
スティーブンエバーズ

単一のソリューションセットアップで経験を共有してくれたMainMaに感謝します。非常に詳細で役立つ回答。私が持っているのは、すべてのアプリケーションを1つのソリューションにまとめることです。ジュニア開発者がすべてにアクセスできるようにする必要があります。私たちはAnkhsvnを使用します。すべてにアクセスできるようにするのではなく、後輩の開発者に作業してほしい単一のアプリケーションのURLを提供したいです。これについて何か考えはありますか?
ブルースヒル

@BruceHill:SVNを使用すると、誰が何にアクセスできるかを正確に構成できます。ジュニア開発者は引き続きすべてのルートディレクトリを表示できますが(サーバーフォールトに関する私の質問を参照)、制限されたプロジェクトにアクセスすることはできません。
アルセニムルゼンコ

2
開発者の大規模なチームが毎日コードをコミットしている少数の大企業で働いている私は、単一ソリューションのアプローチが機能しないことを伝えることができます。各プロジェクトはオーバーヘッドです。積み込み、ビルド、そして神は、誰かが前述のプロジェクトにアタッチしたかもしれないビルドの前後のステップを知っています。現在、大規模な開発者チームにより、毎日これらのプロジェクトの多くで変更が行われます。継続的な統合のために、各チェックインで単体テストなどを実行すると、さらにオーバーヘッドが発生します。展開可能なユニット(サービス、Webサイト)ごとに1つのソリューションを用意し、NuGetなどのパッケージマネージャーを使用します。
常に学習

8

これは意図された使用法です。

アプリケーションごとに個別のソリューションを用意するのではなく、すべてのアプリケーションを単一のソリューションに入れることの長所と短所は何ですか?

  • 長所:
    • プロジェクト間のイーザー参照
    • 簡単なデバッグ/ステップスルー
    • プロセスへの接続が簡単になります(つまり、共有ライブラリコードにジャンプすると、Windowsサービスをステップスルーし、すべてのシンボルが既に読み込まれ、説明されているために動作します)。
    • ide内のコード検索がよりうまく機能します(探しているコードがどのプロジェクトにあるかを必ずしも知る必要はありません)
    • プロジェクト間のチェンジリストは管理が簡単です(つまり、ライブラリコードを変更したため、1回のチェックインでクライアントコードを同時に更新する必要があります)
  • 短所:
    • ビルド速度:「すべて再ビルド」の習慣がある場合、ビルドに時間がかかります。さらに長く、インクリメンタルビルドには時々ファンキーな動作があります。
    • ide speed:次を参照

Visual Studioは20以上のプロジェクトのソリューションを使用してどのくらいの速度ですか?

20以上のプロジェクトでは...それほど悪くないかもしれません。私はVSに問題がないことをもっと見ました。それはかなり安定/速いです。しかし...それが問題であれば、それを緩和することができます:VSで.csprojを開き、そこから作業します。すべてを1つのソリューションに入れることのメリットは得られませんが、必要なときにいつでもslnを開き直して、必要なときに.csprojだけで作業することができます(今のように)。

また、ソース管理された同時開発を使用したソリューションファイルはどの程度安定していますか?

ソリューションファイルは、プロジェクトまたはソリューションレベルのオブジェクトを追加/削除するときにのみ変更されるため、ほとんど変更されません。xmlなので、内容を確認できます。それらはめったに変わりません。


スティーブ、あなたは「これは意図した使用法と言いましたこれに関するリファレンスを提供できますか?ありがとう!
改革
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.