2

これはおそらく哲学的な問題です。

ある種のフレームワークがあり、フレームワークの特定の側面を簡単に使用できるようにする.NETライブラリを提供することにしたとします。フレームワークを使用する各アプリケーションがライブラリのコピーをローカルに保持することを望まないので、GACにそれを置きたいと思います(それが意味する可能性のあるすべてのメンテナンスの問題があっても)。

フレームワークにライブラリをGACにインストールさせるのは非常に簡単なので、各アプリでインストールする必要はありません。ただし、ライブラリの新しいバージョンを作成するときは、フレームワークインストーラーで古いライブラリと新しいライブラリの両方を実行して、一部のアプリケーションで使用されている可能性のある古いライブラリがアップグレードによって削除されないようにする必要があります。

ただし、各アプリケーションがライブラリをGACにインストールする場合は、Windowsインストーラーの参照カウントが開始され、アップグレードシナリオで古いライブラリを持ち歩くことをフレームワークが心配する必要がなくなります。使用中のライブラリは、最後のWindowsインストーラー参照がなくなった場合にのみアンインストールされます。

明らかに、各アプリケーションは、アプリケーションのビルド時にライブラリにアクセスでき、インストーラーに簡単に含めることができます。

誰かが一方と他方の意見/視点/経験を持っていますか?これは厳密には望ましいタイプの質問ではないことを理解していますが(ディスカッションを招くため)、短いディスカッションが役立つと思います。

4

2 に答える 2

1

また、複数の製品がまさに必要であり、フレームワークには、各製品で参照されるMSIマージ モジュールを使用するだけです。

<Feature ...>
  ...
  <MergeRef Id="FrameworkMergeModule" />
</Feature>
...
<Directory ...>
  <Merge Id="FrameworkMergeModule" SourceFile="..\Tools\Framework.msm" ... />
</Directory>

あなたが言ったように、参照カウントはその仕事をします。

アセンブリを GAC に入れるためにジャンプする余分なフープがあります (厳密な名前付け、wix でのもう少しの作業) が、大きなことは何もありません。このアプローチは、GAC を使用するか、単純な xcopy デプロイメントをインストール ディレクトリに (wix-fu 経由で) 実行する場合に機能します。

私たちが(アセンブリに厳密な名前を付けた後に)感じた主な問題は、実際に使用する前に AssemblyVersion および AssemblyFileVersion 属性を完全に理解していなかったことです...本当に必要な場合にのみ AssemblyVersion を変更し、Build および/または、物事を少し簡単にするためのリビジョン バージョン (規律あるバージョン管理戦略がある場合)

于 2009-05-05T05:41:09.837 に答える
0

フレームワークの各新しいバージョンは下位互換性がありますか? コンポーネントを非推奨にしたり、インターフェイスを変更したりしたことはありますか?

上記の質問に「いいえ」と仮定すると、バージョンを増やし、新しいライブラリで古いバージョンをアンインストールし、新しいライブラリをインストールすることができます。次に、GAC ポリシー ファイルを使用して、古いバージョンを新しいバージョンにマップします。そうすれば、古いライブラリを参照するアプリケーションを変更する必要がなくなり、新しいバージョンにマップされます。

ポリシー ファイルの作成に関する SO の質問は次のとおりです。

パブリッシャー ポリシー ファイルに関する MS ドキュメント

次の例では、1.0.0.0 を参照するすべてのアプリケーションが新しい 2.0.0.0 を使用するように強制します。ワイルドカードも使えると思います。

<configuration>
    <runtime>
        <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
            <dependentAssembly>
                <assemblyIdentity name="myAssembly"
                       publicKeyToken="32ab4ba45e0a69a1"
                       culture="en-us" />
                <!-- Redirecting to version 2.0.0.0 of the assembly. -->
                <bindingRedirect oldVersion="1.0.0.0"
                      newVersion="2.0.0.0"/>
            </dependentAssembly>
        </assemblyBinding>
    </runtime>
</configuration>
于 2009-05-28T02:53:07.660 に答える