2009-11-07 2 views
2

J'ai un assembly qui fournit la structure de classe pour une section de configuration personnalisée. Existe-t-il un moyen de câbler la section de configuration pour pointer vers l'assembly dans un répertoire différent ou l'assembly doit-il être dans le même répertoire que l'application consommatrice ou le GAC? Si cela peut être dans un répertoire différent, comment/où devrais-je le spécifier?Est-il possible de créer une section de configuration personnalisée avec l'assembly dans un répertoire différent?

Par exemple:

 
MyConsole.exe 
- lib folder 
- - The custom config assembly. 

EDIT:

Voici mon App.config:

<configSections> 
     <section name="TestCustomSection" type="TestCustomConfigSections.TestCustomSection, TestCustomConfigSections" /> 
</configSections> 
<TestCustomSection message="Test is a subdirectory test." /> 

Lorsque TestCustomConfigSections.dll est dans le même répertoire que mon application console, il fonctionne très bien . Au moment où je le déplace vers/lib, il déclenche une exception lorsque mon code appelle GetSection("TestCustomSection") car il ne trouve pas le fichier ou l'assembly.

Merci

Répondre

2

Lorsque la fusion .NET lie vos références il passe par un certain nombre de répertoires lorsque le sondage pour les dll demandés. Tous devraient être des sous-répertoires de votre ApplicationBase. Vous pouvez les voir en examinant le journal de fusion produit par l'utilitaire fuslogvw. Pour lancer l'utilitaire, vous pouvez ouvrir l'invite de commande à partir du menu Visual Studio Tools. Si ce processus de vérification ne trouve pas votre DLL, des exceptions seront émises

À moins que le sondage ne se soit passé, vous vous êtes abonné à l'événement AppDomain.AssemblyResolve. Dans ce cas, vous aurez la possibilité de charger vous-même l'assembly en utilisant Assembly.Load ou Assembly.LoadFrom.

Modifier

Il regardera dans d'autres répertoires que si elles sont répertoriées dans la propriété AppDomainSetup PrivateBinPath. Si vous créez votre domaine programatically vous pouvez définir la propriété vous-même, pour la principale appdomain vous pouvez le configurer dans votre fichier appconfig:

 
<configuration> 
    <runtime> 
     <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <probing privatePath="bin;bin\subdir;anotherbin"/> 
     </assemblyBinding> 
    </runtime> 
</configuration> 

Le point que je tentais de faire les répertoires supplémentaires doivent être sous votre Appbase , sinon ils sont ignorés

+0

J'ai essayé d'utiliser le fuslogvw et il montre mon assembly quand il est dans le même répertoire que mon exe mais au moment où je le déplace dans un sous-répertoire, il le perd. Sur la base de ce que vous avez dit, il devrait regarder les sous-répertoires de l'ApplicationBase mais cela ne semble pas être le cas. – JamesEggers

+0

Après avoir ajouté l'élément assemblyBinding à mon fichier de configuration, tout s'est très bien passé. Merci! – JamesEggers

Questions connexes