9
votes

Dll ne copie pas au dossier bin

J'ai un problème avec Devart DLLS ne se copie pas sur le dossier BIN de mon application Web. J'ai mon projet d'application Web qui fait référence au projet de projet. Projecta références Projectb. Les DLL de Devart sont utilisées dans le projet de projet et ne sont pas copiées dans le dossier BIN de projets d'applications Web lors d'une construction. Le projecteur fait également référence à des dlls El Unity et sont en cours de copie correctement. Toutes les DLL en question sont physiquement situées dans un dossier dans le projet et c'est là que le point de référence. (Je n'ai pas les références pointant sur le GAC)

Les DLL qui copient correctement sont Microsoft.practices.unity, Microsoft.practices.unity.Configuration et Microsoft.Practices.Servicelocation. p>

Les dlls qui ne sont pas copiés correctement sont davart.data, devart.data.oracle et devart.data.oracle.design. P>

Voici les références pour chaque DLL ... P>

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


0 commentaires

5 Réponses :


10
votes
  1. Cliquez avec le bouton droit de la souris sur les DLL référencées et vérifiez si la copie locale est vraie.
  2. Vous pouvez également essayer de réduire vos références une fois, cela avait résolu un problème similaire pour moi lorsque j'avais converti un projet VS2005 au projet VS2008.

7 commentaires

J'ai une copie locale égale à vraie. J'ai ré-ajouté les références de dévélicité de la vie plus d'une fois ... croyez-moi. Il semble que ce ne soit que les DLL de Devart. Pourraient-ils avoir un problème qui cause cela?


Je ne peux penser à rien d'autre, vous pourriez probablement essayer de copier les thèses pendant la pochette ou la référence des DLL directement du projet


En outre, si vous avez les DLL Devart dans GAC, essayez de les supprimer et de reconstruire vos projets


Comment puis-je les supprimer en toute sécurité du GAC?


Qu'est-ce que tu veux dire par retirer en toute sécurité du GAC? Les DLL ont probablement été copiés sur GAC lorsque vous avez installé Devart, essayez de les instaualiser ou de type assemblage dans la fenêtre d'exécution et appuyez sur Entrée. Recherche de DLAT DLLS Cliquez avec le bouton droit de la souris sur et sélectionnez Désinstaller.


Supprimer les DLL du GAC a travaillé. Semble bizarre de devoir faire ça. Merci!


Supprimer / rejouter la référence ne fonctionnait pas pour moi. Cependant, j'ai changé la propriété "copie locale" sur false, puis de retour à True, et cela a fonctionné.



0
votes

Si ces DLL sont dans un sous-répertoire pour le projet B, assurez-vous que la propriété "Copie locale" pour chaque référence est définie sur true.

En outre, si les fichiers DLL sont inclus dans vos fichiers de votre projet, consultez les propriétés Visual Studio pour les fichiers eux-mêmes. L'action "Build Action" doit être définie sur "Aucun" et "Copier au répertoire de sortie" doit être définie sur "Ne pas copier". Edit: les avoir simplement en tant que références avec copie locale = true prendra soin de la copie.

Si ces paramètres sont différents pour les différentes dlls, cela pourrait expliquer pourquoi certains sont en cours de copie dans le dossier BIN et que d'autres ne sont pas.


0 commentaires

12
votes

J'ai eu un problème similaire avec des références externes. La chose est que les bibliothèques inutilisées ne sont pas copiées. Utilisez-vous les bibliothèques d'Evart de votre projet? N'importe quel cas, héritage, n'importe quoi, ... ?? S'il vous plaît essayez ceci: Instansiez une classe moquée des trois bibliothèques de votre projet et de votre recompilation. ça a marché pour moi. Je voudrais arriver à l'explication formelle.


0 commentaires

1
votes

défini comme copie locale ne fonctionne pas pour moi. La seule chose qui résout (est inutilisable) est de faire référence à un type de type contenu dans l'assemblage.


0 commentaires

4
votes

Le problème apparaît aussi lorsque vous avez des DLL qui sont des dépendances des autres. Par exemple, Microsoft.ApplicationServer.caching.AzueclientHelper.dll est utilisé en interne par Microsoft.ApplicationServer.caching.client. Même si j'ai copylocal = true, l'assistant d'assistant n'est pas copié car il n'est référencé nulle part directement dans mon code. Pour éviter ce problème, vous pouvez créer une variable de type privé comme celle-ci:

Type DependsemThistypePassembly = typeof (typeFromDependenSeublement);

Cela fera référence au type et l'assemblage sera copié localement tout en fonction du processus de construction.


0 commentaires