2017-12-18 2 views
-3

私たちは、当社のベンダーのいずれかが開発したDLLを使用してデバイスとやりとりするアプリケーションを持つ顧客を持っています。新しいデバイスをリリースしたいのでこのdllを置き換える必要がありますが、同じアプリケーションの2つのバージョンを持つことを望まないため、クライアントは再コンパイルしたくありません。アセンブリ参照エラーなしでDLLをどのように置き換えることができますか?アプリケーション内でDLLを置換する

ありがとうございました。これが機能するために

+1

I依存関係によってAPIが変更された場合は.exe – Phiter

+3

に外部にエクスポートすると、すべてをアップグレードする必要があります。 –

+1

アセンブリに署名はありますか?もしそうなら、あなたが望むことをするには方法がありません。あなたのベンダーの公開鍵があなたとは違うからです。それ以外の場合は、公開APIを変更する(たとえば、新しいメソッドを追加する、署名を変更する、など)まで機能します。 – HimBromBeere

答えて

3

元のdllが(その参照アセンブリの交換を認識しません)それ以外の場合は、あなたの交換まったく同じアイデンティティを与えることができなくなり、signedすべきではありません。これを回避するための唯一の方法は、あなたのベンダーが使用するものと同じsnk(Strong Name Key)ファイルを使用して置換えを行うことです - それは非常にお勧めできないsnkファイルを与える必要があります避けてください!)。

置換dllは元のdllと同じ公開APIを提供する必要があります。

交換用DLLは、オリジナルと同じバージョン番号を持つ必要があります。または、別のバージョン番号を使用して新しいDLLをロードするためにネットを伝えるために、アプリケーションの設定ファイルにを使用する必要があります。

<configuration> 
    <runtime> 
     <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <dependentAssembly> 
      <assemblyIdentity name="myAssembly" 
          publicKeyToken="32ab4ba45e0a69a1" 
          culture="neutral" /> 
      <bindingRedirect oldVersion="1.0.0.0" 
         newVersion="2.0.0.0"/> 
     </dependentAssembly> 
     </assemblyBinding> 
    </runtime> 
</configuration>