プログラムで読み込まれたアセンブリ内のアセンブリへのASP.NETアプリケーション参照

StackOverflow https://stackoverflow.com/questions/804267

  •  03-07-2019
  •  | 
  •  

質問

ASP.NETアプリケーションはアセンブリを読み込み、その中のオブジェクトからクラスインスタンスを作成します。アセンブリ自体には、<!> quot; Aspose.Cells.dll <!> quotというDLLへの参照があります。これは問題なくアクセスでき、アセンブリファイル自体と同じパスにあります。ただし、そのメソッドの1つにメソッド呼び出しを行うと、次のエラーが表示されます。

  

ファイルまたはアセンブリ「Aspose.Cells、Version = 4.1.2.0、Culture = neutral、PublicKeyToken = 9a40d5a4b59e5256」またはその依存関係の1つをロードできませんでした。

ASP.NETアプリケーションもこのDLLを参照する必要があると思いますが、これまで試したすべてが失敗しました。ロードされるアセンブリDLLは、Webアプリケーションのルート内にありません。そうする必要はありません。

このようにアセンブリをロードできます:

Assembly asm = Assembly.LoadFile(@"D:\Dev\EasyFlow\Plugins\ImportExportLibrary\bin\Debug\Aspose.Cells.dll");

ただし、次のように使用することはできません:

AppDomain newDomain = AppDomain.CreateDomain("testAspose");
Assembly asm = newDomain.Load(System.IO.File.ReadAllBytes(@"D:\Dev\EasyFlow\Plugins\ImportExportLibrary\bin\Debug\Aspose.Cells.dll"));

より良い方法はありますか?

更新:

返信いただきありがとうございます。

アセンブリをbinフォルダーまたはGACにコピーできないことを忘れていました。構成ファイルのアセンブリへのパスを変更することでアセンブリを簡単に置き換えることができるプラグインシステムとして機能させたいためです。ファイルをメインプロジェクトに手動でコピーします。

ただし、AssemblyResolveイベントは興味深いようです。後で試してみましょう。

役に立ちましたか?

解決

これを行うにはいくつかの方法があります。 1つの方法は、マイクロソフトサポート技術情報の記事に記載されています <!> quot; binフォルダー以外のフォルダーにある実行時にアセンブリをロードする方法アプリケーションの <!> quot;。これを行うための非常に良い段階的な方法を提供します。

他のヒント

依存アセンブリをBinフォルダーにコピーするか、GACにインストールできます。

<!> lt; compilation <!> gt;でweb.configにアセンブリ参照を追加できると考えています。セクションのように:

<compilation debug="true">
  <assemblies>
     <add assembly="Aspose.Cells, Version=4.1.2.0, Culture=neutral,  PublicKeyToken=9a40d5a4b59e5256"/>
  </assemblies>
</compilation>

これが機能するかどうかはまったくわかりませんが、<!> lt; configSections <!> gt;のweb.configに対応するエントリが必要になる場合があります。 <!> lt; configuration <!> gt;の下のノード。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top