2010-10-01 18 views
6

Tengo un problema con las DLL de Devart que no se copian en la carpeta bin de mi aplicación web. Tengo mi proyecto de aplicación web que hace referencia a projectA. ProjectA hace referencia al proyectoB. Los Devart Dlls se utilizan en projectB y no se copian en la carpeta bin de proyectos de la aplicación web durante una compilación. ProjectB también hace referencia a dll de EL Unity y se están copiando correctamente. Todos los Dlls en cuestión están físicamente ubicados en una carpeta en projectB y ahí es donde se encuentra el punto de referencia. (No tengo las referencias que señalan al GAC)No copie todo en la carpeta bin

Los dlls que se copian correctamente son Microsoft.Practices.Unity, Microsoft.Practices.Unity.Configuration y Microsoft.Practices.ServiceLocation.

Las DLL que no se copian correctamente son Devart.Data, Devart.Data.Oracle y Devart.Data.Oracle.Design.

He aquí las referencias para cada DLL ...

<Reference Include="Devart.Data, Version=5.0.124.0, Culture=neutral, PublicKeyToken=09af7300eec23701, processorArchitecture=MSIL"> 
    <HintPath>..\Dtn.PetroDex.Dal\ThirdPartyDlls\Devart.Data.dll</HintPath> 
    <SpecificVersion>False</SpecificVersion> 
    <Private>True</Private> 
</Reference> 
<Reference Include="Devart.Data.Oracle, Version=5.70.170.0, Culture=neutral, PublicKeyToken=09af7300eec23701, processorArchitecture=MSIL"> 
    <SpecificVersion>False</SpecificVersion> 
    <HintPath>..\Dtn.PetroDex.Dal\ThirdPartyDlls\Devart.Data.Oracle.dll</HintPath> 
    <Private>True</Private> 
</Reference> 
<Reference Include="Devart.Data.Oracle.Design, Version=5.70.170.0, Culture=neutral, PublicKeyToken=09af7300eec23701, processorArchitecture=MSIL"> 
    <SpecificVersion>False</SpecificVersion> 
    <HintPath>..\Dtn.PetroDex.Dal\ThirdPartyDlls\Devart.Data.Oracle.Design.dll</HintPath> 
    <Private>True</Private> 
</Reference> 
<Reference Include="Microsoft.Practices.ServiceLocation, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"> 
    <HintPath>..\Dtn.PetroDex.Dal\ThirdPartyDlls\Microsoft.Practices.ServiceLocation.dll</HintPath> 
    <SpecificVersion>False</SpecificVersion> 
    <Private>True</Private> 
</Reference> 
<Reference Include="Microsoft.Practices.Unity, Version=2.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"> 
    <HintPath>..\Dtn.PetroDex.Dal\ThirdPartyDlls\Microsoft.Practices.Unity.dll</HintPath> 
    <SpecificVersion>False</SpecificVersion> 
    <Private>True</Private> 
</Reference> 
<Reference Include="Microsoft.Practices.Unity.Configuration, Version=2.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"> 
    <HintPath>..\Dtn.PetroDex.Dal\ThirdPartyDlls\Microsoft.Practices.Unity.Configuration.dll</HintPath> 
    <SpecificVersion>False</SpecificVersion> 
    <Private>True</Private> 
</Reference> 

cualquier otra persona tienen este problema? ¿Estoy haciendo esto mal? Gracias

EDIT Abrí un monitor de archivos y miré donde visual studio estaba cargando la referencia y para Unity estaba obteniendo los dlls de la ubicación que especifiqué. ¡Pero para Devart dlls está buscando en el GAC! ¿Podrían los Devart dlls estar causando esto de alguna manera?

Respuesta

8
  1. haga clic derecho en los dlls a los que se hace referencia y compruebe si copy local es verdadero.
  2. También puede intentar leer sus referencias una vez, esto me resolvió un problema similar cuando convertí un proyecto VS2005 al proyecto VS2008.
+0

Tengo copia local igual a verdadero. He vuelto a agregar las referencias de Devart más de una vez ... confía en mí. Parece que solo son los dlls de Devart. ¿Podrían tener un problema que está causando esto? –

+0

no puedo pensar en otra cosa, probablemente podría intentar copiar tesis durante la compilación posterior o remitir los dlls directamente desde el proyecto A –

+0

, también si tiene los dlls devart en GAC intente eliminarlos y reconstruir sus proyectos –

0

Si estas DLL están en un subdirectorio para el proyecto B, asegúrese de que la propiedad "Copiar local" para cada referencia esté establecida en verdadero.

Además, si los archivos DLL se incluyen como archivos en su proyecto, verifique las propiedades visuales del estudio para los archivos mismos. La "Acción de compilación" debe establecerse en "Ninguno" y el "Directorio de copia en salida" debe establecerse en "No copiar". EDITAR: Simplemente tenerlos como referencias con copy local = true se encargará de la copia.

Si estas configuraciones son diferentes para los diferentes DLLS, eso podría explicar por qué algunos se están copiando en la carpeta bin y otros no.

11

Tuve un problema similar con las referencias externas. El caso es que las bibliotecas no utilizadas no se copian. ¿Utiliza las bibliotecas Devart de su proyectoB? Cualquier instancia, herencia, cualquier cosa, ... ?? Por favor intente esto: Instale una clase falsa de las tres bibliotecas en su projectB y vuelva a compilar. Me ha funcionado. Me gustaría llegar a la explicación formal.

1

Establecer como copiar local no funciona para mí. Lo único que se resuelve (no se puede usar) es hacer referencia a algún tipo contenido en el ensamblaje.

3

El problema también aparece cuando tienes dlls que son dependencias de otros. Por ejemplo, Microsoft.ApplicationServer.Caching.AzureClientHelper.dll se usa internamente por Microsoft.ApplicationServer.Caching.Client. Aunque tengo copyLocal = True, el ensamblaje auxiliar no se copia porque no está referenciado en ningún lugar directamente en mi código.Para evitar este problema, puede crear una variable de tipo privada como esta:

Tipo dependsOnThisTypeOfAssembly = typeof (TypeFromDependentAssembly);

Esto hará una referencia al tipo y el ensamblado se copiará localmente durante el proceso de compilación.

Cuestiones relacionadas