1

Visual Studio 2010 を使用して C# でいくつかの非常に基本的なアーキテクチャの問題を管理する方法を理解する必要があり、教科書や Web サイトで解決策を見つけるのに苦労しています。MyWinForm.cs と 2 つのクラス ライブラリに基づく MyWinForm.sln ソリューションがあるとします。たとえば、a.dll、b.dll 私の目的: C# を順番に学習するためだけにコーディングしたアプリケーションをリファクタリングしたいと考えています。適切なアプリケーション アーキテクチャを持つこと。

  1. さまざまなアプリケーションで再利用するために汎用メソッドを含む必要がある c.dll を設計したいと考えています: MyWinForm と、たとえば yawfs.sln (さらに別の Windows フォーム ソリューション) の両方を使用して、c への参照を作成できるようにします。 dll を両方のソリューションから取得します。新しいクラス ライブラリソリューションを作成する必要があると思います そのクラスを再利用するため。しかし、私の知る限り、別のソリューションへの参照を追加することはできません。現在のソリューション内のアセンブリ (現在のソリューション内の別のプロジェクト) または .Net アセンブリへの参照のみを追加できます。ナビゲーション パネルを使用して a.dll アセンブリを選択し、参照を追加する必要がありますか? おそらく、既存のアセンブリを現在のソリューションに含めて、対応するソリューション内で実行された変更と同期させる方法はありますか? 理解できません。

  2. MyWinForm から b.dll を抽出して、c.dll とまったく同じ目的でそれを促進したい場合はどうすればよいですか? 新しいソリューションとして宣伝するにはどうすればよいですか?

  3. ここで、MyWinFormLeft.sln と MyWinFormRight.sln を持つように MyWinForm をフォークする必要があるとしましょう。どちらも共通の共有コードとは異なる方法で進化します。まったく同じ a.dll アセンブリと b.dll アセンブリ (同じバージョン) を使用 (および共有) しますが、MyWinForm.cs のコードは変更され始めます。既存のソリューションから新しいソリューションを作成する正しい方法は何ですか?

私の質問が非常に厄介に聞こえることはわかっていますが、VS と C# の共同使用パターンと、以前に使用した C コンパイラ/リンカー サイクルとの間で実行しようとしている比較から問題が発生します。コードをコンパイルしてライブラリを取得し、次にリンクします。どのようなアプリケーションでもそれらを必要とします。限目。

4

3 に答える 3

2

複数のソリューション間でコードを共有する必要がある場合、私はその共有コードを独自のソリューションに配置し、ナゲットとしてパッケージ化する傾向があります (方法については、こちらを参照してください)。

その後、ナゲットは、バージョン管理された簡単な同期/更新方法でその機能を必要とする任意のソリューションによって参照できます (ナゲットは単純にローカルフォルダーに存在できます)。

于 2013-03-01T19:36:15.657 に答える
1

I guess that I should create a new class library solution in order to reuse its classes

You guess correctly.

I cannot add a reference to a different solution: I can only add references to assemblies within the current solutions

You can only add references to projects in the current solution. You can add references to built assemblies that are the output of another solution.

What if I wish to extract b.dll from MyWinForm

b.dll will be deployed independently of MyWinForm.exe - you do not need to "extract" it.

Now let's say that I need to fork MyWinForm so that I'll have MyWinFormLeft.sln and MyWinFormRight.sln; ... What is the correct method to create a new solution from the existing one?

That depends on the severity of the differences between the two projects. The common non-visual components could be classes in a shared class library. The common visual components could be User Controls in the same or a separate class library.

于 2013-03-01T19:30:10.390 に答える
1

これは個人的な好みの問題です。

プロジェクトを複数のソリューションに含めることができます。私は個人的に、それが起こるのを待っている災害だと思いますが、それにはファンがいます. これにより、人々が深刻な混乱に陥るのを見てきました。物事をリファクタリングするようになり、依存関係の一部を壊す必要がある場合は、その一端を引っ張って、親ソリューション全体をひざに乗せます。かなりの規律が必要ですが、物事を分解すると、そのようにうっかり自分の足を撃ってしまうことはありません。

ファンもいる1つのソリューションにすべてを入れることができます。同時に多くのライブラリを開発している場合+プロトタイプ+ユニットテストを行うと、多くの切り替えを節約できます。

あなたが行きたいと言っている方法と、私たちがそれを行う傾向がある方法も同様です。

最初に、他のソリューションのプロジェクトからビルドされた dll への参照を追加できます。参照の追加に移動するだけで、タブの 1 つは [参照] で、フォルダーを選択し、dll を選択します。

問題は、ソリューションの外部にビルド依存関係があることです。これは、サード パーティの dll を使用する場合と同じです。したがって、common.dll に別の共通関数を追加する場合は、ソリューションを切り替え、追加し、ビルドし、ソリューションを切り替える (または VS の 2 つのコピーを使用する) 必要があります。

その後は、参照しているdllが作成したばかりのものであることを確認する方法の問題です。これは、共通フォルダーへのビルド パスを設定するか、使用するプロジェクトが期待する場所にコピーするためのビルド後のイベントです。痛みが好きなら手動でコピーできます...

これには多くの柔軟性があり、ニーズに合った方法を見つけることができます。

于 2013-03-01T20:27:03.070 に答える