2011-12-19 6 views
4

自分のDLLを使用するいくつかの小さなアプリケーションを作成しました。問題は、このDLLが絶えず変化していることです。この問題に対する私の現在の解決策は、DLLを作成して登録するクラスライブラリソリューションにセットアッププロジェクトがあることです。私のすべてのアプリケーションでは、ソリューションを開き、新しく作成/登録されたDLLを再参照する必要があります。 セットアッププロジェクトを再コンパイルし、古いアプリケーションをアンインストールしてから、新しいアプリケーションを再インストールする必要があります。常に変化しているDLLをどのように展開するのですか?

私はこのすべてにかなり新しいので、より良い方法があり、わかりません。私はClickOnceを見てきましたが、私はクラスライブラリを公開できないので、私の問題を解決するとは思いません。私はバージョン番号のチェックを調べましたが、どちらもうまくいかないので間違ったことをしているに違いありません。

私は、DLLを作成してアプリケーションで使用すると、本質的には触れないことを理解します。このような状況で私はその選択肢を持っていません。常に更新されています。完了しました。

だから、良い方法がありますか?ガイドや関連する質問/回答/フォーラムの方向にある点は非常に高く評価されます。

編集:DLLは実行時に絶えず変更されているわけではありませんが、他のアプリケーションではより多くの機能と詳細が得られるように常に進化しています。また、私が言及しておかなければならない大きなことの1つは、パブリックインターフェイスが絶え間なく茶色になることです。通常、新しいメソッドを追加します。

+0

実行時に常にdllが変更されていますか? – Daryl

+4

DLLの変更点それが内部実装(パブリックインターフェイスの変更なし)の場合は、すべてを再コンパイルせずにDLLを置き換えることができます –

+0

DLLが署名されていますか?その場合は、バージョン番号をそのまま残してください。上記の手順はすべてcmdスクリプトから行うことができるので、おそらく現在のプロセスを自動化するだけです。 –

答えて

5

DLLへの参照がSpecificVersion = falseを指定していることを確認してください。その後、新しいバージョンをGACに展開するだけで、そのトリックを行うはずです。 最終的に、Binding Redirectionを使用して手動で強制的にバージョンを強制することもできます。

+0

これは素晴らしい解決策です。正確にOPが望んでいたもの。 NuGetなどの他のソリューションでは、他のプロジェクトの再コンパイルと再デプロイが必要です。 – Shiroy

1

解決策は、プロジェクトに単一のソリューションを使用し、必要な場所でプロジェクトを参照することです。

0

チェックアウトNuGet

あなたは内部Nugetリポジトリ設定できます(nupkgファイルを格納する実際にはフォルダを。)あなたは新しいDLLをビルドするときに、あなたはスタジオで、必要に応じてアプリケーションを更新することができます。これにより、最新版が確実に提供されます。修正しているDLLにバグがないかぎり、再配布は必要ありません。次のように

0

一つの解決策は、次のとおり

  • 物理的実装からインターフェイスを分離します。例えばAssemblyAはインタフェースであり、アプリケーション(AssemblyBは言う)はコンパイル時にインタフェースのみを認識します。実装(AssemblyC)はもちろんAssemblyAも知っている/参照しています。要点は、AssemblyBはAssemblyCを参照していないということです。これには、実行時にコンクリートを解決してインスタンス化するために、IoCコンテナ(MS Unity 2.0などがありますが、他にもたくさんあります)を使用する必要があります。
  • 新しいAssemblyC.dllを見つけ、ローカルコピーを置き換え、リフレクションをIoCContainerとともに使用して、新しい実装を必要な時間(通常はアプリの起動)にロードします。

上記はインターフェイスが安定していることを前提としています。そうでない場合は、安定した(Facade)を書くことができます。

関連する問題