アプリケーションのフォルダ外でdllを参照し、そのメソッドとインターフェイスを動的に読み込む方法は?それを行う方法はありますか?展開後も別のフォルダからdllを参照する
注:アプリケーションの配備後でも、そのパスからの参照が必要です。
アプリケーションのフォルダ外でdllを参照し、そのメソッドとインターフェイスを動的に読み込む方法は?それを行う方法はありますか?展開後も別のフォルダからdllを参照する
注:アプリケーションの配備後でも、そのパスからの参照が必要です。
それを行うには多くの方法がありますを使用してそのメソッドを呼び出します。実行時アセンブリの検索方法の詳細は、How runtime locates assembliesを参照してください。
あなたはapp.config
でcodeBase
要素を介して正確な位置を指定することができますあなたのアセンブリは、アプリケーションのサブフォルダにある場合は、あなたがprobing
要素を使用することができます
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="myAssembly"
publicKeyToken="32ab4ba45e0a69a1"
culture="neutral" />
<codeBase version="2.0.0.0"
href="http://www.litwareinc.com/myAssembly.dll"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
:それが失敗したすべての場合は、
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<probing privatePath="bin;bin2\subbin;bin3"/>
</assemblyBinding>
</runtime>
</configuration>
をイベントハンドラを書き込んで、AppDomain.AssemblyResolveにアタッチしてアセンブリを明示的に読み込むことができます。 SOにも例があります。
Assembly.LoadFrom(string)
を試してみます。この過負荷はアセンブリへのパスを引き出し、リフレクションでそれを利用できるようにします。
あなたはこのようにアセンブリを取得することができます:
var sampleAssembly = Assembly.LoadFrom("c:\\Sample.Assembly.dll");
var method = sampleAssembly.GetTypes()[0].GetMethod("Method1");
ありがとうございました。ダイナミックローディングなしで同じことを達成できますか? – user7380740
どうすればそれはアプリケーション自体とは別の別のフォルダにあり、そのDLLのバージョンが頻繁に変更されますか? – user7380740
その後、 'AppDomain.AssemblyResolve'ルートを使用しなければなりません。アプリケーションのエントリポイントのどこかに、ローダが通常のメカニズムでアセンブリをロードできなかったときに呼び出されるレジスタハンドラ。ハンドラの中でアセンブリを見つけ、 'Assembly.LoadFrom'でロードして返します。私がリンクしているので、同様の質問からの例を見てください。 – nejcs
私の問題は、ルートdllはアプリケーションパス(C:\ Program Files \ RING)になければならず、他のものは別の場所(C:\ Program Files \ ThirdParty)になければならないということです。ダイナミックローディングなしでこれを実現できます。デプロイ後もthirdpartyフォルダに参照する必要がありますか? – user7380740