1

VB6 アプリケーションを、VB.Net で書き直された対応するアプリケーションに置き換えています。
VB6 アプリには、ユーザーにフォームを提示し、ドロップダウン リストから「クライアント」を選択できる「コントロール」アプリケーションがありました。クライアントを選択すると、VB6 で記述され、対象のマシンに登録されたいくつかの dll のプログラム名を含む、クライアント固有のパラメーターを設定する ini ファイルが読み取られます。

たとえば、「クライアント」ごとに異なるレター形式があり、レターは選択した dll によって書き込まれました。これにより、すべてが遅延バインドされましたが、ユーザーは 1 人しかいません。何よりも、その dll のみを更新し、古い dll の上に dll をドロップすることで、個々の文字を継続的に更新することが便利になりました。したがって、(事務) ユーザーは、このファイルを通常のフォルダーに保存するように指示されるだけで済みました。すべてを 1 つの exe にまとめてコンパイルすることもできたので、更新がより大きく、より複雑になりました。

VB.Net でこれをやり直すには、この種のアプローチをどのように置き換える必要がありますか?

  1. すべてを 1 つの大きなプロジェクトにまとめることができました (そして、私が避けていた大きな更新である exe にコンパイルすることができました)。私はそれをするべきですか?

  2. クライアント固有 (.net) の dll を個別にコンパイルするというアプローチを続けた場合、これは .Net の世界で意味がありますか? どのように呼びますか? 以前と同じように登録する必要がありますか? 長所短所?

  3. これを行う正しい方法は何ですか?

4

4 に答える 4

1

この種の機能を提供するために、私がすぐに考えることができるいくつかの方法があります。

  1. Reflectionを使用して、実行時にアセンブリを動的にロードします。(これは十分に文書化されており、見た目ほど難しくはありません。)
  2. MicrosoftEnterpriseLibraryのUnityなどのIoCコンテナを使用します。
  3. MEFフレームワークを使用します。(Microsoftからも)
  4. テンプレートのセットごとにリソースファイルを使用します。

IoCコンテナーは、ユーザーごとに異なるコンテナーを使用して実装でき、各コンテナーは異なるアセンブリを配線します。そして、私はあなたの要件によりよく合うと思います。

MEFを見る機会はまだありませんが、Unityと同じですが、構成の代わりに属性を使用して配線を行うと思います。これにより、テンプレートを動的に変更できなくなる可能性があります。

リソースファイルシステムを使用すると機能し、実際にロードするのは簡単ですが、テンプレートにコードを含めることができなくなります。これは、VB6クラスが現在実際に行っていることによって問題になる場合と問題にならない場合があります。

もちろん、VB6テンプレートをまったく書き直すことはできず、COM相互運用機能を使用してそれらにアクセスするだけです。しかし、それでもVB6コードをサポートする必要があり、おそらくあなたが求めているものではありません。

于 2009-07-22T20:22:03.750 に答える
1

レター テンプレート用にテキスト ベースのフォーマットを作成します。これにより、テンプレートが変更されるたびに何かをコンパイルする必要がなくなります。しかし、そのような dll を本当に動的にロードしたい場合は、System.Addin名前空間を使用するか、リフレクションを使用してActivator.CreateInstance()、dll 内で関心のある型に特定のインターフェイスを実装させ、特定の属性でマークすることで実行できます。

于 2009-07-22T20:15:50.270 に答える
0

グローバル アセンブリ キャッシュは、レジストリが COM で果たした役割の一部を担います。

于 2009-07-24T04:02:24.397 に答える
0

良い答えがいくつかありますが、アドバイスをいただけますか?書き換えが正しい動きであることを確認してください。大規模なアプリケーションの書き直しを楽観的に開始し、古いアーキテクチャの欠陥の修正を順調に進めた後、何年もの間当たり前だと思っていた機能の再現に行き詰まってしまうことはよくある落とし穴です。この時点で、すべてが非常に不快になり、プロジェクトはしばしば失敗します。

Microsoft UK の Web ページからの公式アドバイス。

.NET に完全に書き直すことは、[VB6 を VB.NET に半自動的に変換するよりも] はるかにコストがかかり、適切に行うのが困難です ... このアプローチは、少数の状況でのみお勧めします。

Microsoft の従業員のブログからの引用:

私が .NET の黎明期に一緒に仕事をした多くの企業は、.NET への移行と同時に、基盤となるアーキテクチャとコード構造を改善したいという強い願望に突き動かされて、最初に書き直しに目を向けました。残念なことに、これらのプロジェクトの多くは困難に陥り、いくつかは完成しませんでした。彼らが解決しようとしていた問題は大きすぎました。

そうは言っても、一部の人々は .NET で VB6 アプリを正常に書き直し、その結果に非常に満足しています。しかし、最初によく考えてください。

于 2009-07-23T09:21:55.070 に答える