2010-12-10 12 views
0

私は自分自身でうまく動作する特定のDLLを自分のアプリケーションに持っています。しかし、ベンダーは、Visual Studioを使用して組み込みようとしている新しいバージョンのDLLをリリースしました。 DLLは異なる名前空間を使用しながら同じファイル名を共有し、後のDLLは下位互換性がありません。同じ名前の.Net Dllを一緒に使用するにはどうすればいいですか?

VSに新しいファイルを使用させるには、私は理にかなっているファイルの名前を変更しました。しかし、アプリケーションをビルドするたびに、新しいdllをアプリケーションフォルダにコピーしたいだけで、基本的に古いDLLは無視されます。私は 'コピーローカル'と運がない他の設定を試みました。私はおそらくGACにDLLを追加し、それで終わらせることができますが、本当にしたくないです。

どうすればVSを両方とも別々のアイテムとして扱うことができますか?

+0

おそらく、ベンダーが単に乱雑でない限り、理由のために後方互換性がない可能性があります。 – Bernard

+0

「ビジュアルスタジオで作業する」と言えば、ビジュアルスタジオのプラグインですか?ビジュアルスタジオがそうでなければ、ビジュアルスタジオと何が関係しているのか分かりません。 –

+0

ビジュアルスタジオはIDEなので、ビルなどをやっているのです。それはプラグインではなく、私のIDEです。 – Telavian

答えて

0

私は実際にアプリケーションフォルダにdllをコピーする簡単なポストビルドステップでこの問題を解決しました。 VSはそれぞれ異なる処理を行いましたが、ビルド時には後でコピーされました。

4

私は自分自身で正常に動作する私のアプリケーションで特定のDLLを持っています。しかし、ベンダーは、私はなぜあなただ​​けの完全に古いDLLを削除して新しい作品を作るためにあなたのコードを変更しないのVisual Studio

を使用して組み込むしようとしていたDLLの新しいバージョンをリリース?なぜあなたは同時に両方を使いたいのですか?

+0

はるかに簡単に言った。私は古いコードと新しいコードの作業コードの作業コードを持っています。彼らはなぜ共存できないのですか? – Telavian

+1

なぜあなたはそれらを望んでいますか?あなたは新しいものか古いものを使用します。もちろん、新しいバージョンでコードが壊れてしまい、いくつかの変更を加える必要があります。それはあなたの選択ですが、両方を使用しないでください。 –

+0

なぜ私はそれらを望んでいないでしょうか? DLLも同様のことをしますが、まったく別のデータです。私のクライアントには古いデータがあり、それを使用していますが、新しいクライアントには古いデータと新しいデータのオプションがあります。 「ただ新しいものを使う」とは根本的な問題を全く知らないということです。それは、ヘルプデスクの人のように、ハードドライブをフォーマットするようなことを常に言っているように聞こえる。 – Telavian

2

2つのDLLを異なるサブディレクトリに展開できます。 app.configに、各バージョンを見つける場所を示すルールを設定する必要があります。

MSDN page for the <codeBase> elementに基づい例:

<configuration> 
    <runtime> 
     <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <dependentAssembly> 
      <assemblyIdentity name="myAssembly" 
           publicKeyToken="32ab4ba45e0a69a1" 
           culture="neutral" /> 
      <codeBase version="1.0.0.0" 
         href="Version1/myAssembly.dll"/> 
      <codeBase version="2.0.0.0" 
         href="Version2/myAssembly.dll"/> 
     </dependentAssembly> 
     </assemblyBinding> 
    </runtime> 
</configuration> 

ビルド時に、あなたは混乱になってからVisual Studioのを防ぐために、偽のローカルコピー=を設定する必要があります。また、バージョン1とバージョン2のサブディレクトリを設定するビルド後の手順も必要です。

これは、バージョン番号に基づいてDLLを区別できることを前提としています。

+0

ポストビルドステートメントは、私がそれらのことをすることができることを覚えていました。私が必要として以来、しばらくしてきました。ありがとう。 – Telavian

関連する問題