Visual Studio 2010 C ++ / CLI en mode Bibliothèque statique: impossible de trouver l'assembly 'mscorlib.dll'
Je suis en train de travailler sur un C++/CLI projet avec VS 2012 en librairie Dynamique (.dll) et x64 mode.
Si je passe en mode Statique de la Bibliothèque, j'obtiens l'erreur ci-dessous.
Erreur 1 erreur C1107: impossible de trouver l'assemblée "mscorlib.dll': veuillez préciser l'assemblée chemin de recherche à l'aide de /l'IA ou en définissant la variable d'environnement LIBPATH C:\Depot\Main\Current\Sln\ALibraryProject\Stdafx.cpp 1 1 ALibraryProject
J'ai essayé de supprimer la référence à la mscorlib.dll puis l'ajouter à nouveau à partir de:
Projet > Propriétés > Général > Propriétés Communes
Mais cela n'a pas aidé. Comme je sais que VS gère la référence à l' .NET assemblées, je ne veux pas ajouter un fichier de disque référence à elle comme il semble illogique! Quelqu'un face à cela avant?
source d'informationauteur Adam
Vous devez vous connecter pour publier un commentaire.
Ce n'est pas l'erreur typique que vous obtenez lorsque vous essayez de créer une bibliothèque statique avec /clr en effet. Je dois supposer que vous avez été bricoler avec des paramètres de projet de se débarrasser de l'insondable de l'éditeur de liens erreurs que vous obtenez lorsque vous essayez de le faire.
Cœur de la question est que le C++/CLI construire le système ne prend pas en charge les bibliothèques statiques qui contiennent MSIL. Code managé ne pas utiliser un éditeur de liens, la liaison se produit lors de l'exécution. Ce qui fait la différence essentielle entre les bibliothèques statiques et les Dll de disparaître. Alors que Microsoft a décidé de ne pas l'appuyer, car il n'a pas beaucoup de sens pour la mettre en œuvre. Malheureusement, ils ne criez pas assez fort lorsque vous essayez de le faire de toute façon, l'éditeur de liens erreurs que vous obtenez ne donnent pas assez d'un indicateur de ce que vous avez fait de mal. Solutions de contournement, à l'instar de la fusion avec ILMerge ne fonctionne pas non plus, il ne peut pas traiter avec un mélange de mode assemblées. La fusion du code natif sections et de leurs associés à la réinstallation des entrées de la table est très untrivial.
Garder à l'esprit que c'est bien beau de lien natif de bibliothèques statiques. Typique de C++/CLI projet n'a qu'à la classe de référence des wrappers qui a besoin d'être construit avec /clr en effet. Vous pouvez coller n'importe quel montant de code natif à partir de bibliothèques dans l'assemblage final.
Je suis obligé de le théoriser sur l'erreur de compilation, de trop nombreux programmeurs obtenir cette erreur pour un autre raison qui n'a rien à voir avec la construction de bibliothèques statiques et ils sont harceler moi dans les commentaires.
Faire attention que le ciblage d'une autre version de .NET-vous que vous avez installé sur votre machine est assez mince affaire, surtout si vous souhaitez cibler 4.0 et que vous avez 4.5.x installé. L'élément clé de votre .fichier vcxproj est le
<TargetFrameworkVersion>
. Ce sera absent si vous avez commencé le projet en faveur d'une vieille .Version NET, vous devez insérer par vous-même. L'IDE ne supporte pas de le changer si il est présent, de nouveau éditer à la main.Ce qui est suffisant pour amadouer MSBuild en générant la bonne compilation de commande. Vous pouvez vérifier si c'panoramique-bien, regardez-vous dans le *.tlog sous-répertoire de la version Debug répertoire de votre projet. La cl.commande.1.tlog fichier affiche les options qui ont été passés au compilateur. Il doit contenir:
Note de la sous-répertoire, très important qu'il correspond à votre intention .NET de la cible. v4.0 dans cet exemple. Et très, très important qu'il ne pas point de c:\windows\microsoft.net, l'héritage de l'emplacement de référence assemblées.
J'ai eu le même problème lors de la conversion de ma solution de la VS2010 compilateur pour VS2013 compilateur.
Je l'ai résolu en changeant les paramètres du projet (pour le projet contenant le géré .fichier cpp qui a lancer cette erreur) comme suit: Dans Paramètres de Projet | C/C++ | Générale | plus d' #à l'aide de Répertoires j'ai ajouté la macro $(FrameworkPathOverride). Cela résout à l'ensemble de référence du répertoire de la version de .NET que vous ciblez, qui dans mon cas est C:\Program Files (x86)\de Référence Assemblées\Microsoft\Framework.NETFramework\v4.5.1
J'ai le même problème. Avoir une dll ne fonctionne pas, car j'ai besoin de fournir un natif wrapper C++ pour un .net de l'objet de sorte qu'il peut remplir un natice interface c++ - je ne peux pas utiliser .net dans une interface de dll - ce qui donne une erreur de compilation
Cela a fonctionné comme une bibliothèque statique dans VS 2010 .net 4)
Certains de mes executables et les dll, qui ont aussi un peu de code avec /clr. Ils n'ont pas un problème. Je ne suis pas en train de faire une nette Lbirary.
Je l'ai résolu en supprimant la dépendance à la vieille et pas mis à jour mixte lib, qui a également été configuré dans la configuration de Débogage, et comme résultat, il a commencé à obtenir la même erreur que la vôtre après que j'ai modifié le code.
Il n'était pas simple à trouver, car l'erreur n'est pas clair, et la dépendance a été mis en place par l'intermédiaire de "Dépendances Supplémentaires" dans les paramètres de projet.