Foros del Web » Programación para mayores de 30 ;) » .NET »

Cargar DLL segun tipo de procesador

Estas en el tema de Cargar DLL segun tipo de procesador en el foro de .NET en Foros del Web. Hola a todos, estoy iniciándome en la programación de VB.net y en uno de los proyectos que estoy haciendo de pruebas estoy incluyendo varias librerías, ...
  #1 (permalink)  
Antiguo 22/09/2012, 14:39
Avatar de bookmaster  
Fecha de Ingreso: febrero-2002
Ubicación: Toledo
Mensajes: 976
Antigüedad: 22 años, 9 meses
Puntos: 67
Cargar DLL segun tipo de procesador

Hola a todos, estoy iniciándome en la programación de VB.net y en uno de los proyectos que estoy haciendo de pruebas estoy incluyendo varias librerías, incluido una que estoy haciendo yo mismo.

Estoy usando el Windows 7 x64 y el Visual Studio 2010.

Una de las "librerías" que estoy usando es para el manejo de bases de datos de access 2010, esta librería viene con un instalador que se descarga de la página de microsoft, la cual tiene 2 versiones una para x86 y otra para x64. Si instalo la de x86 me tira un error porque me dice que mi versión es x64, por lo que no me queda mas remedio de instalar esta última.

En el programa a la hora de compilar si selecciono x86 me tira error al usar la clase para controlar la base de datos, si le pongo en X64 o Any si que me funciona perfectamente.

La cosa es que estoy intentando añadir otra librería para el manejo de Bases de datos SQLitle, pero vienen precompiladas para x86 o x64, por lo que si le implemento la x64 funciona bien, pero si entro en un sistema x86 me da error.

Entonces la cosa es la siguiente, crear una Carpeta junto al ejecutable llamada Librerias y dentro meter las 2 versiones de las DLL en diferentes carpetas, de tal manera que por medio de una clase cargue una u otra dependiendo del sistema.

Pero no encuentro la manera de hacer esto.

La cosa es no tener que hacer el mismo proyecto 2 veces simplemente por un par de librerías.

Espero podáis ayudarme, ya que me imagino que este tema le puede servir a mas personas que estén en la misma situación.

Gracias por adelantado.
__________________
Decir si te a funcionado la respuesta es ¡GRATIS!. Por favor indicarlo.
http://www.lohacemosweb.net
http://tutoriales.lohacemosweb.net
  #2 (permalink)  
Antiguo 23/09/2012, 12:02
Usuario no validado
 
Fecha de Ingreso: junio-2010
Ubicación: Guatemala
Mensajes: 196
Antigüedad: 14 años, 5 meses
Puntos: 25
Respuesta: Cargar DLL segun tipo de procesador

Saludos, al parecer puedes realizar lo que necesitas con una modificación manual al archivo de proyecto.

Puedes ver las soluciones a preguntas similares en stackoverflow:
http://stackoverflow.com/questions/3...-visual-studio
http://stackoverflow.com/questions/1...lution-project
http://stackoverflow.com/questions/2...rid-of-warning

Yo no lo he intentado, sin embargo, si logras un avance al respecto sería bueno que comentaras tu experiencia en este tema.

Saludos.
  #3 (permalink)  
Antiguo 23/09/2012, 16:17
Avatar de bookmaster  
Fecha de Ingreso: febrero-2002
Ubicación: Toledo
Mensajes: 976
Antigüedad: 22 años, 9 meses
Puntos: 67
Respuesta: Cargar DLL segun tipo de procesador

Hola JonathanB gracias por responderme.

Estoy probando la modificación del archivo del proyecto como aparece en esos enlances.
Este es el código que supuestamente hace lo que necesito
Código XML:
Ver original
  1. <ItemGroup Condition="'$(Platform)' == 'x86'">
  2.     <Reference Include="System.Data.SQLite, Version=1.0.82.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139, processorArchitecture=AMD64">
  3.       <SpecificVersion>False</SpecificVersion>
  4.       <HintPath>Librerias\x64\System.Data.SQLite.dll</HintPath>
  5.       <Private>True</Private>
  6.     </Reference>
  7.   </ItemGroup>
  8.   <ItemGroup Condition="'$(Platform)' == 'x64'">
  9.     <Reference Include="System.Data.SQLite, Version=1.0.82.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139, processorArchitecture=x86">
  10.       <SpecificVersion>False</SpecificVersion>
  11.       <HintPath>Librerias\x86\System.Data.SQLite.dll</HintPath>
  12.       <Private>True</Private>
  13.     </Reference>
  14.   </ItemGroup>

También probé con este otro código y hace lo mismo.
Código XML:
Ver original
  1. <Reference Include="System.Data.SQLite, Version=1.0.82.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139, processorArchitecture=MSIL">
  2.       <SpecificVersion>False</SpecificVersion>
  3.       <HintPath>Librerias\$(Platform)\System.Data.SQLite.dll</HintPath>
  4.       <Private>True</Private>
  5.     </Reference>

Pero lo que me da la sensación que lo que hace es copiar la versión específica según la versión de compilación, por lo que habría que compilar el proyecto 2 veces en vez de sólo 1.

En la siguiente imagen te muestro lo que trato de hacer.

La carpeta Librerias estaría junto al ejecutable y dentro de esta carpeta hay 2 subcarpetas para meter los archivos expecíficos a dichas versiones, mientras que los archivos introducidos en Librerias son válidos para ambos.
La cosa es que no soy capaz de que me reconozca los archivos, si no están justo al lado del ejecutable.

Seguramente sea alguna opción en la configuración del proyecto pero como ya comente, estoy iniciándome en ello, normalmente cuando aprendo algún lenguaje nuevo voy buscando ejemplos y me los estudio para saber como funcionan y así poder hacer las adaptaciones a lo que pudiera necesitar.

Sigo investigando el tema a ver como hacerlo.
Gracias nuevamente.
__________________
Decir si te a funcionado la respuesta es ¡GRATIS!. Por favor indicarlo.
http://www.lohacemosweb.net
http://tutoriales.lohacemosweb.net

Última edición por bookmaster; 23/09/2012 a las 16:28
  #4 (permalink)  
Antiguo 24/09/2012, 05:34
Avatar de bookmaster  
Fecha de Ingreso: febrero-2002
Ubicación: Toledo
Mensajes: 976
Antigüedad: 22 años, 9 meses
Puntos: 67
Respuesta: Cargar DLL segun tipo de procesador

He conseguido un pequeño avance en lo que se refiere a la ruta de las librerías para poder ponerlas dentro de las carpetas.

Añadiendo el siguiente código al archivo app.config que se encuentra dentro del proyecto.
Código XML:
Ver original
  1. <runtime>
  2.     <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
  3.        <probing privatePath="Librerias;Librerias\x86;Librerias\x64"/>
  4.     </assemblyBinding>
  5. </runtime>
Nota: Añadir debajo de <configSections></configSections> ya que si se pone por encima tirará error en la ejecución.

Aún no me distingue las x86 de las x64 para que se carge la correspondiente a la versión de windows.
Sigo investigando la manera de hacerlo ;)
__________________
Decir si te a funcionado la respuesta es ¡GRATIS!. Por favor indicarlo.
http://www.lohacemosweb.net
http://tutoriales.lohacemosweb.net

Última edición por bookmaster; 24/09/2012 a las 06:26 Razón: Agregada la nota

Etiquetas: dll, procesador, sql, tipo, vb, visual, windows
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:05.