J'ai une solution Visual Studio 2008.NET C ++ / CLI. Ma solution consiste en de nombreux sous-projets. Je définis un répertoire de construction personnalisé pour chaque projet et l'appelé "sortie". P>
Ma solution: p>
Chacun du sous-projet Utilisez log4.net.so I Créer un répertoire (appelé logbinaire) et mettre log4.net DLL dans ce dossier. Ensuite, pour utiliser log4net, j'ajoute cette DLL comme référence à chacun de mon projet. P>
Mais quand j'essaie de compiler mon projet principal (* .exe), j'ai eu des tonnes d'avertissement (plus de 400). P>
juste un exemple: p>
avertissement 110 AVERTISSEMENT C4945: "AbsoluteTimeDateDateDateDeatTateDateDateDated":
ne peut pas importer le symbole de strong> 'Certainspath \ log4net.dll': comme 'Log4Net :: DateFormatter :: AbsoluteTimeDateDateDeform' a déjà été importé à partir d'un autre assemblage fort> 'log4net' "Quelqu'un \ log4net.dll" em> p> blockQuote> beaucoup d'avertissements avec: p>
a déjà été importé d'un autre assemblage em> p> blockQuote>
Pourquoi est-ce que je reçois ces avertissements? Quelqu'un a-t-il une solution pour ajouter la même DLL à plusieurs projets (sauf en utilisant GAC)? P>
5 Réponses :
Changer de référence sur les projets, définissez toutes les propriétés "Copier local ..." sur FALSE. P>
Source: http://developertips.blogspot.com/2008/ 07 / CCLI-AVERTISSEMENT-C4945.HTML P>
Eh bien, cela ne fonctionne pas ... doit aussi faire "user ..." Propriétés faux pour référencé * .dll..mais dans cette situation, vous ne pouvez pas utiliser ce * .dll ... ce n'est pas une solution élagante mais Ce que j'ai trouvé, c'est créer un projet vide * .dll Ajouter une référence à celle * DLL (dans ma situation Ajouter log4.net DLL à ce projet factice) .Ce si souhaité utiliser cette dll (log4.net) d'un autre projet ajoutez ce mannequin Projet DLL au lieu d'une référence directe à la DLL partagée (log4.net)
J'ai eu ce même problème. Il est causé par la situation suivante, où un projet dépend d'un autre projet:
my_solution -> System.Xaml.dll -> System.dll my_solution -> System.dll
Cela ne fonctionne pas si vous avez (disons) 2 projets de hiérarchie à mi-hiérarchie qui ont besoin d'un accès aux projets de feuilles. Lorsque les projets de niveau intermédiaire sont inclus, vous obtenez le projet principal qui gémit que les symboles ont déjà été inclus par l'une ou l'autre.
Pas besoin de voter - votez-le lorsque vous n'avez pas fourni de solution vous-même. Après des années d'avertissement de construction, à mon travail, nous avons simplement désactivé l'avertissement de construction 4945 comme étant complètement inutile.
Mais vous n'avez pas exactement le même problème; L'OP indique que tous ses composants font également référence au projet dépendant et si c'est le cas, ce que vous avez affiché ne résoudra pas son problème. Si vous pouvez poster une réponse sur la manière de désactiver les avertissements, alors je suis upvote avec plaisir que ...
J'ai eu le même avertissement sur cette situation:
Solution -> Project1 Solution -> Project2 -> (Project1) Solution -> Project3 -> (Project1, Project2)
J'ai enfin trouvé une solution à ce problème qui ne ressemble pas à un hack. J'ai trouvé la réponse dans une réponse de ' PYRO_SERV` sur le site social MSDN :
Le correctif consiste à utiliser les drapeaux "Utiliser des dépendances dans la construction" et "Utiliser dans la construction" des indicateurs sur chaque projet de projet VC (via la feuille de propriétés VC) et les basculer, le cas échéant, pour que votre cas résolve cette erreur. p> blockquote>
Donc pour l'exemple de l'OP qui ressemble à ceci comme ceci: p>
xxx pré> Le moyen d'éviter les avertissements est de définir
Utiliser des dépendances dans la construction < / code> sur false pour toutes les références à
proj1, proj2, .., projn code>. p>
Je viens de vérifier cela avec une solution de démonstration et cela fonctionne bien - je Je ne peux pas croire à quel point la solution est simple et combien de temps j'ai gaspillé pour le trouver! p> p>
Juste FYI, j'ai récemment eu un problème similaire découlant de "dépendances d'utilisation" étant défini sur true par défaut, sauf que dans mon cas, en plus de produire les avertissements, il produisait également C3699 '^' ne peut pas utiliser cette indirection sur type 'X' CODE> ERREURS - Sauf que les types en question étaient des types gérés de manière à ce que cela aurait dû être capable de le faire. Juste au cas où quelqu'un d'autre rencontre aussi ce petit étrangeté aussi.
cette. Exactement le problème pour moi aussi sur Visual-Studio-2005. Ensemble Utiliser des dépendances dans la construction = FALSE code>, ajoutez les références et tout va bien. On peut noter que le
utilise des dépendances dans la construction code> n'existe même pas dans la version vs plus récente (2010 ...)
J'avais le même problème aujourd'hui.
Tout d'abord, grâce à Jon Cage et à l'article lié de son poste sur ce fil, voir ci-dessus (ou ci-dessous) . +1 !!! Il a résolu mon problème. P>
mais parce que je déteste les choses comme Voici mes conseils et mes explications: "Propriétés communes" -> "Cadre et références" -> "Références" -> Sélectionnez une référence. Définir ce paramètre arrière-plan technique: Méthode 2: strong> BTW: Cela vous oblige à spécifier toutes les références nécessaires pour chaque projet, vous avez donc également une vue d'ensemble ce que vous utilisez dans votre projet. P>
Dernières informations: Je ne peux pas dire à coup sûr si mon explication est correcte. Peut-être. sinon peut confirmer. p> les basculer, le cas échéant pour votre cas code>, ce qui signifie que
essai et erreur code>, j'ai fait des tests comme j'ai 2 solutions avec un bon nombre de projets C ++ / CLI dans chacun. P>
Sur la feuille de propriété à droite -> "Build Propriétés" -> "Utilisez des dépendances dans la construction"
- (copié de l'article de Forum MSDN Lield MSDN de Post de Jon Cage) P>
blockQuote>
Utilisez des dépendances dans la construction code> à "FALSE" en décochissant.
Cela fonctionne comme «renvoi de référence», voir exemple ci-dessous. P>
-> signifie "références"
Méthode 1: forte>
Dans ma solution Swcore:
A.1.1 Network-> Outils Code>, A.1.2
Réseau-> Basics Code>.
A.2.1 Outils-> Basics code>.
A.3.1 Drives-> Basics Code>, A.3.2
Drives-> Outils Code>, A.3.3
Drives-> Réseau Code>
A.4.1 ...
Avec "Utiliser des dépendances dans la construction" définies sur True, la référence A.1.2 peut être omise, car elle est incluse dans A.2.1.
Tous les fichiers sont créés dans Swcore \ version \
== problème:
En solution DDI:
B.1.1 DDI_HARDWARE-> DDI_JOB CODE>, B.1.2
DDI_HARDWARE-> Drives Code>
B.2.1 DDI_JOB-> BASICS CODE>, B.2.2
DDI_JOB-> Outils CODE>,
B.2.3 DDI_JOB-> Job Code>
ddi_job code> est créé dans ddi \ version \ et avec "u.d.inbuild" défini sur true, il inclut
basics code>.
ddi_hardware code> est créé ... et avec "u.d.inbuild" défini sur true, il comprend
ddi_job-> basics code>.
Ddi_hardware Références également les bases de Swcore \ Livraison \
== >> double référence aux bases et aux autres. Vs voit 2 fichiers et ne peut pas comprendre qu'il s'agit du même contenu. Strong> p>
A.1.1 Network-> Outils Code>, A.1.2
Réseau-> Basics Code>.
A.2.1 Outils-> Basics code>.
Avec "u.d.inbuild" défini sur False, la référence A.1.2 ne peut pas être omise, car elle n'est pas transmise à partir de A.2.1.