2011-07-27 17 views
8

Me gustaría vincular directamente a Dlls que se utilizan en compilación/runtime. El diseño de mi programa es el siguiente: Console Exe inicia un archivo winform dll. Ese dll usa un montón de dlls para realizar. Appconfig se encuentra en el proyecto de winform dll. Según algunas lecturas, ¿el dll winform está buscando la aplicación incorrecta.config? Tengo la intención de ejecutar mi dll usando Assembly.LoadFrom();app.config dependentAssembly no funciona

creé un archivo app.config y añade las siguientes líneas dentro de la sección

<runtime> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <dependentAssembly> 
      <assemblyIdentity name="CommonConversions" 
           publicKeyToken="null" 
           culture="neutral" /> 
      <codeBase version="1.0.0.0" 
         href="file://C://BMS_ACTD//bin//DX//Globals//CommonConversions.dll"/> 
     </dependentAssembly> 
     <dependentAssembly> 
      <assemblyIdentity name="GlobalConstants" 
           publicKeyToken="null" 
           culture="neutral" /> 
      <codeBase version="1.0.0.0" 
         href="file://C://BMS_ACTD//bin//DX//Globals//GlobalConstants.dll"/> 
     </dependentAssembly> 
     <dependentAssembly> 
      <assemblyIdentity name="MessageInstance" 
           publicKeyToken="null" 
           culture="neutral" /> 
      <codeBase version="1.0.0.0" 
         href="file://C://BMS_ACTD//bin//DX//Globals//MessageInstance.dll"/> 
     </dependentAssembly> 
     <dependentAssembly> 
      <assemblyIdentity name="MessageInterface" 
           publicKeyToken="null" 
           culture="neutral" /> 
      <codeBase version="1.0.0.0" 
         href="file://C://BMS_ACTD//bin//DX//Globals//MessageInterface.dll"/> 
     </dependentAssembly> 
     <dependentAssembly> 
      <assemblyIdentity name="ToolsInterface" 
           publicKeyToken="null" 
           culture="neutral" /> 
      <codeBase version="1.0.0.0" 
         href="file://C://BMS_ACTD//bin//DX//Globals//ToolsInterface.dll"/> 
     </dependentAssembly> 
    </assemblyBinding> 
</runtime> 

La ubicación es sin duda correcta. Los dlls no tienen un nombre fuerte, de ahí el publicKeyToken = "null". todas mis versiones son 1.0.0.0. Cuando miro las propiedades de mi dll referenciado, la Cultura está en blanco. ¿Debería ser el mío también? ¿Hay algo que parece que estoy haciendo mal?

+0

¿Qué error se puede conseguir? – oleksii

+0

Una primera excepción del tipo 'System.IO.FileNotFoundException' producido en BmsReplayAnalysis.dll Una primera excepción del tipo 'System.TypeInitializationException' producido en BmsReplayAnalysis.dll no puede cargar el archivo o ensamblado 'MessageInterface, versión = 1,0 .0.0, Culture = neurtral, PublicKeyToken = null 'o una de sus dependencias. El sistema no puede encontrar el archivo especificado – Jason

+0

¿Puede agregar su aclaración a la pregunta? –

Respuesta

3

App.config no se debe utilizar en un dll pero solo con un ejecutable.

Si carga un archivo DLL dentro de un ejecutable el archivo DLL va a utilizar el archivo de configuración del ejecutable en ejecución y no hará caso de la configuración definida por él ..

Si lo desea, puede leer las claves de la configuración utilizando un código feo que los toma del archivo de configuración del ensamblaje actual.

Lo que DEBE hacer es colocar la configuración correspondiente en el archivo de configuración de exe.

actualización

encontrado más información en la siguiente pregunta: C# DLL config file