2009-05-26 6 views
0

Lorsque le framework spring.net démarre pour une application asp.net, le composant qui enregistre tous les objets dans le conteneur IoC recycle-t-il tous les sous-répertoires référencés dans le fichier web.config?Est-ce que spring.net recurse les sous-répertoires?

par ex. Je crois que la réponse à oui est la sortie de l'information de débogage (écouteur de trace). Le problème que je vois est que lorsqu'il tente de créer une instance dans le répertoire '\ bin \ clientservice' il échoue avec le message d'erreur même si la DLL existe dans le sous-répertoire;

'Impossible de charger le fichier ou l'assemblage' log4net, Version = 1.2.10.0, Culture = neutre, PublicKeyToken = 1b44e1d426115821 'ou l'une de ses dépendances. Le système ne peut pas trouver le fichier spécifié. '

Quelqu'un a-t-il des idées?

Vive

Ollie

Répondre

2

Vous avez également la possibilité de gérer les défaillances de charge programme de montage, en utilisant la AppDomain.AssemblyResolve événement sur la classe AppDomain.

Vous pouvez, par exemple, analyser tous les sous-répertoires à la recherche de l'assemblage qui vous intéresse.

0

Lorsque Spring.NET tente de résoudre une référence dans son fichier de configuration, il utilisera le même rules que le chargeur d'assemblage .NET. Alors peut-être que vous pourriez essayer d'ajouter la référence correcte de l'assembly log4net dans votre dossier bin.


EDIT: Si vous voulez Spring.NET pour localiser des ensembles dans des endroits non standard, vous pouvez utiliser l'élément <assemblyBinding> pour indiquer l'emplacement:

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

Et vous pouvez alors demander le conteneur à instancier l'objet:

var someObject = ContextRegistry.GetContext().GetObject("someObject"); 
+0

D'après ce que j'ai compris aussi, le fichier log4net se trouve dans le répertoire 'bin \ clientservice' et il ne peut pas le résoudre à partir du sous-répertoire ... – AwkwardCoder