2

私がいるところでは、ネットワーク共有上にある一連のアセンブリの機能を使用する実行可能なプログラムが多数あります。たとえば、共通のシステム ログ、DB 接続文字列、いくつかの共通のビジネス オブジェクトや関数への書き込みなどです。等

このセットアップが気に入っているのは、バグ修正と新機能を簡単にデプロイできるためです。共有ドライブ上のアセンブリを更新するだけで、それらを使用するすべてのアプリが最新になります。バイナリ互換性を破る必要がありますか? これは簡単なことではありませんが、それでも大したことではありません。新しいバージョン番号を持つ新しいフォルダーを追加するだけです。Subversion は各バージョンがどこにあるかを認識しているため、各バージョンで複製されたコードにバグ修正をデプロイすることができます。いくつかの変更を 1 つの新しいセットにまとめることができるように、それが本当に必要かどうかを確認するために最初に議論が行われる可能性もありますが、これを行う必要があることは、現時点ではほとんどありません。

これをサポートするために、共通ライブラリの参照が自動的に含まれるカスタム プロジェクト テンプレートがいくつか用意されています。

最後に、問題の要点を説明します。私たちが行っていることの多くは、多数の小規模な従来の従来の ASP ページをサポートすることです。これらは、新しい開発とともに、ゆっくりと .Net にも移行しています。私たちは、他のアプリケーションが使用するのと同じサポート フレームワークをこれらの Web アプリに使用できるようにしたいと考えています。従来の知恵では、ASP.Net アプリは GAC の外部にあるアセンブリや、それ自体の小さな仮想ディレクトリを参照することはできないと言われています。したがって、ASP.Net ページで共通コードを使用するには、Web サーバーとすべての開発者マシンの GAC にコードをインストールし、このコードへのすべての更新がそれらの場所にも伝播されるようにするのが最善の方法です。私たちはそれが不快だと思います。

ASPNet アカウントに、共通コードが存在するネットワーク共有から読み取るために必要なアクセス許可を与えることができ、これらのアプリ用のカスタム プロジェクト テンプレートを作成することを考えると (これにより、Web にいくつかの設定が自動的に含まれる可能性があります)。たとえば、通常のasp.netページクラスを出発点として構成またはサブクラス化します)結局、これらのアセンブリを現在の場所から参照できるかもしれないという型にはまらない知恵を知っている人はいますか?

4

2 に答える 2

2

Joel さん、アプリケーションの構成ファイルの要素を活用できないでしょうか? <codebase>私の知る限り、それはUNC共有を処理します。新しいアセンブリバージョンを名前付きフォルダーに既に配置している<codebase>場合、新しいバージョンがロールアウトされたときに、おそらくサブバージョンを使用して、適切な構成ファイルを新しい要素で更新できるようですフックスクリプト。

バージョン番号を変更せずに更新を行った場合、問題が 1 つ発生します。これは、マシンが既にコピーをダウンロードしており、変更を認識していない可能性が高いためです。

于 2009-08-08T06:01:58.067 に答える
0

私の知る限り、あなたが言ったように、ASP.NET でアセンブリを共有する唯一の方法 (コードなし) は GAC (または各サイトのローカルにコピーを維持し、それぞれが最新であることを確認する) です。

価値があるよりも面倒かもしれませんが、Web サーバーの GAC にロードできる単一のアセンブリを作成する可能性はありますか?

私の考えでは、GAC で単一のアセンブリを記述し、従来の参照またはリフレクションを通じて、共有ドライブ上の他の共有アセンブリからのオブジェクトに対する要求をマーシャリングすることができます。

そうすれば、共有フォルダー内のアセンブリのメンテナンスの手間が最小限に抑えられ、GAC 内の単一のアセンブリを最新の状態に保つことだけを気にするだけで済みます。

...そのアセンブリのコードを書くことは、常に価値があるよりも面倒なことになる可能性があります。

于 2009-08-07T14:16:47.563 に答える