Domanda

Quando il quadro spring.net avvia per un'applicazione asp.net fa il componente che registra tutti gli oggetti nel contenitore IoC recurse tutte le sottodirectory riferimento nel web.config?

ad es.

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

Credo che la risposta sia sì, guardando le informazioni di debug (trace ascoltatore) in uscita.

Il problema che sto vedendo è che quando si tenta di creare un'istanza nella directory '\ bin \ clientservice' non riesce con il messaggio di errore anche se il dll esiste nella sottodirectory;

'Impossibile caricare il file o l'assembly 'log4net, Version = 1.2.10.0, Culture = neutral, PublicKeyToken = 1b44e1d426115821' o una delle sue dipendenze. Il sistema non trova il file specificato. '

Chiunque ha qualche idea?

Saluti

Ollie

È stato utile?

Soluzione

Hai anche la possibilità di gestire a livello di codice errori di caricamento di montaggio, utilizzando il AppDomain.AssemblyResolve evento sulla classe AppDomain.

Si potrebbe, per esempio, la scansione di tutte le sottodirectory alla ricerca per il montaggio a cui tieni.

Altri suggerimenti

Quando Spring.NET sta cercando di risolvere un riferimento nel file di configurazione userà lo stesso norme come caricatore assembly NET. Così forse si potrebbe provare ad aggiungere il riferimento corretto di assemblaggio log4net nella cartella bin.


EDIT: Se si desidera Spring.NET per individuare assemblee in posizioni non standard è possibile utilizzare la elemento per indicare la posizione:

<?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>

E poi si potrebbe chiedere il contenitore per creare un'istanza dell'oggetto:

var someObject = ContextRegistry.GetContext().GetObject("someObject");
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top