2

IIS または IIS Express での C#、VS2010、.Net 4.0、ASP.NET サービス。

サービス内でサードパーティのアセンブリを使用しています。このサード パーティのアセンブリには .config ファイルがあり、次のように動的に読み込まれます。

サービス -> MyAssembly1 -> Assembly.Load() を使用して MyAssembly2 を動的にロード -> .config を使用したサード パーティ アセンブリ

私は通常 C++ 開発者であるため、この ASP.NET は私にとってかなり新しいものです。ASP.NET アプリケーションでは、使用するアセンブリが一時 ASP.NET ファイル フォルダーに "シャドウ コピー" されることを理解しています。残念ながら、このサード パーティのアセンブリが "シャドウ コピー" されている場合、.config ファイルはそうではありません。したがって、このアセンブリを使用するときは、.config ファイルを開くことができないため失敗します。

アセンブリ内から、そのアセンブリの CodeBase を取得して .config ファイルを自分で読み込むことができますが、このサード パーティのアセンブリはファイル自体を開く必要があるため、これは役に立ちません。

手動で .config ファイルをシャドウ コピーの場所にコピーすると、うまく機能します。

また、このサードパーティは構成ファイルを「assemblyname.dll.config」ではなく「assemblyname.config」と呼んでいました。

私が得るエラーは次のとおりです。

Unable to load configuration file: "\assemblyname.config".

このサード パーティのアセンブリを ASP.NET 以外のアプリ (通常の Windows アプリ) で使用すると、シャドウ コピーを行わないため、うまく機能します。アセンブリと .config ファイルを exe の場所から直接使用するだけです。

何か案は?これはかなり一般的な問題だと思いますが、解決策を見つけることができませんでした。

4

1 に答える 1

0

アセンブリをロードするときの主なことは、アセンブリがディスクに配置されているパスと、アセンブリをロードしようとしているページ ディレクトリを確認することです。したがって、アセンブリをロードするためのパスを追加しても、同じパスから構成ファイルがロードされるわけではありません。両方をアプリのルート フォルダーに配置して、問題が解決するかどうかを確認してください。

于 2013-04-10T12:59:12.847 に答える