1

これが状況です(解決策を探しているだけで、このアプローチを変更することはできません):

  • AppFolder\StartApp.exe
  • AppFolder\General.dll
  • AppFolder\Bll\Business.dll
  • AppFolder\Bll\General.dll

StartApp.exe は、(CreateInstance を使用して) Business.dll 内のクラスをインスタンス化し、そのクラス内でメソッドを実行します。AppFolder の General.dll を常に使用していることがわかりましたが、実際には Bll フォルダー (最新バージョン) の General.dll を使用する必要があります。

4

2 に答える 2

1

<probing>構成でand 要素を使用<codebase> して、アセンブリのパスを指定できます

<configuration>
   <runtime>
      <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
         <probing privatePath="bin;bin2\subbin;bin3"/>
      </assemblyBinding>
   </runtime>
</configuration>

ランタイム アセンブリを見つける方法 - MSDN

于 2013-09-28T17:45:56.263 に答える
0

を直接使用するのActivator.CreateInstanceではなく、 を使用してアセンブリをロードし、インスタンス化する Type を見つけるためにAssembly.LoadFrom繰り返します。GetTypesタイプを取得したら、 apply Activator.CreateInstance.

私が覚えている限り、この方法でロードされた型は、Appdomain.AssemblyResolve必要な DLL に対してイベントを引き起こします。そのイベントを処理し、依存アセンブリを自分でフィードします。これにより、アプリケーション フォルダにある DLL がバイパスされます。

試してみてください。十分なドキュメントがネット上AssemblyResolveおよびLoadFromコンテキストで利用可能です。

于 2013-09-28T18:41:24.727 に答える