0

spring.netフレームワークがasp.netアプリケーション用に起動すると、IoCコンテナー内のすべてのオブジェクトを登録するコンポーネントは、web.configで参照されるすべてのサブディレクトリを再帰しますか?

例えば。

<spring>
  <context>
    <resource uri="~/bin/ClientService/ClientService.config"/>
    <resource uri="~/MCFModule.config"/>
  </context>
</spring>

デバッグ情報(トレースリスナー)の出力を見ると、答えはイエスだと思います。

私が見ている問題は、'\ bin \ clientservice'ディレクトリにインスタンスを作成しようとすると、dllがサブディレクトリに存在していても、エラーメッセージが表示されて失敗することです。

'ファイルまたはアセンブリを読み込めませんでした'log4net、Version = 1.2.10.0、Culture = neutral、PublicKeyToken=1b44e1d426115821'またはその依存関係の1つ。システムは、指定されたファイルを見つけることができません。'

誰かアイデアがありますか?

乾杯

Ollie

4

2 に答える 2

2

AppDomain.AssemblyResolveAppDomain クラスのイベントを使用して、アセンブリの読み込みエラーをプログラムで処理するオプションもあります 。

たとえば、すべてのサブディレクトリをスキャンして、関心のあるアセンブリを探すことができます。

于 2009-06-09T04:53:52.660 に答える
0

Spring.NETが構成ファイル内の参照を解決しようとすると、.NETアセンブリローダーと同じルールが使用されます。したがって、binフォルダーにlog4netアセンブリの正しい参照を追加してみることができます。


編集:Spring.NETで非標準の場所にあるアセンブリを検索する場合は、<assemblyBinding>要素を使用して場所を指定できます。

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <sectionGroup name="spring">
      <section name="context" type="Spring.Context.Support.ContextHandler, Spring.Core"/>
      <section name="objects" type="Spring.Context.Support.DefaultSectionHandler, Spring.Core" />
    </sectionGroup>
  </configSections>

  <spring>
    <context>
      <resource uri="config://spring/objects"/>
    </context>
    <objects xmlns="http://www.springframework.net">
      <object id="someObject" type="log4net.Util.AppenderAttachedImpl, log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=1b44e1d426115821" />
    </objects>
  </spring>

  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="log4net"
                          publicKeyToken="1b44e1d426115821"
                          culture="neutral" />
        <codeBase version="1.2.10.0
                  href="file:///c:/some_special_location/log4net.dll" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>

</configuration>

次に、オブジェクトをインスタンス化するようにコンテナに要求できます。

var someObject = ContextRegistry.GetContext().GetObject("someObject");
于 2009-05-26T14:09:23.613 に答える