2016-10-26 3 views
5

nous avons une DLL C# dans .net4.0 mais construit en utilisant Microsoft.bcl, Microsoft.bcl.async, Microsoft.bcl.build , Microsoft.net.http. Ces libs proviennent de Nuget. Nous avons des raisons de ne pas passer à .net4.5 mais nous voulons utiliser async, attendez de ces libs bcl. Tout fonctionne très bien dans les projets C#, mais nous ne pouvions pas ajouter cette DLL dans nos projets C++ Interop, nous obtenons cette erreur:En utilisant C# dll (construit avec Microsoft.bcl) dans le projet interop (C++ géré)

Nous obtenons cette erreur lorsque nous essayons d'ajouter cette référence au projet.

Même si le projet clr interop est également en .net4.0 et DLL nous ajoutons est également en .net4.0 nous obtenons cette erreur. y a-il un moyen de résoudre cela?

Error in text format: 
--------------------------- 
Microsoft Visual Studio 
--------------------------- 
Could not add a reference to: 

C:\xxx\xxx\xx\xxxHelper.dll 



For one of the following reasons: 

    - Targets a higher version of the .NET Framework 

    - Not a .NET assembly 

    - Not a registered ActiveX control 
--------------------------- 
OK 
--------------------------- 
Code

pour reproduire ce problème: https://dl.dropboxusercontent.com/u/1967630/BCL_Problem/oAuth2_SDK_consumer_DLL/BCL_Problem_projects.zipx

+2

Veuillez toujours fournir une représentation textuelle de l'erreur. Pas pour vous, mais pour le plaisir de l'indexation stackoverflow pour éviter la répétition. La résolution que vous obtenez cette erreur est probablement parce que le projet C# construit après C++. Essayez de construire C# un d'abord, puis manuellement C++ un. – eocron

+0

fait, merci pour les entrées. Non, ce n'est pas le cas avec moi. Je reçois cette erreur lorsque j'essaie d'ajouter C# dll comme référence au projet C++. – rplusg

+0

Avez-vous essayé de faire varier le nombre de bits (x86/x64) des applications C# et C++? – Dmitry

Répondre

3

Je REPRO, semble sûr comme un bug. A en juger par le message d'erreur dans votre capture d'écran, vous utilisez VS2013. Message très inutile, il s'est atténué dans VS2015, mais échoue toujours. Bogue bizarre btw, semble traiter la référence d'assembly Microsoft.Threading.Task que votre projet C# utilise comme un assembly de structure. Je ne connais pas de questions SO précédentes sur ce problème, la plupart des programmeurs le font sans avoir à se battre contre la machine.

Vous devriez envisager de le faire comme ils le font pour éviter cette erreur. Cela ne fonctionne que si vous utilisez le bouton Parcourir dans la boîte de dialogue Ajouter une référence. Mais fonctionne très bien lorsque vous utilisez une référence de projet, la façon dont la plupart des programmeurs préfèrent configurer leur solution. Utilisez donc Fichier> Ajouter> Projet existant, sélectionnez votre projet C#. Ensuite, ajoutez à nouveau une référence, mais cette fois, sélectionnez le projet C# dans la liste Solution> Projets au lieu d'utiliser le bouton Parcourir.

Si cela n'est pas souhaitable pour une raison quelconque, vous pouvez contourner ce problème. Ouvrez votre fichier .vcxproj dans un éditeur de texte, Notepad est très bien. Localisez cet élément:

<TargetFrameworkVersion>v4.0</TargetFrameworkVersion> 

Et modifier le numéro de version à v4.5. Maintenant, ajoutez la référence comme vous l'avez fait avant avec le bouton Parcourir, aucune plainte cette fois. Et revenez au Bloc-notes et changez le numéro de version en v4.0

+0

Rapport de bogue existant [est ici] (https://connect.microsoft.com/VisualStudio/feedback/details/794976/in-ac-project-cannot-add-reference-to-ac-project), difficile de l'imaginer est utile. –

+0

J'ai essayé presque toutes les options et combinaisons, ne fonctionne pas.Classé un cas avec des connexions d'entreprise Microsoft, et ils sont moins qu'utiles. Donc, j'ai posté ici avec une prime. Merci d'avoir regardé. – rplusg

0

Si rien d'autre ne vous aide, vous pouvez essayer de décompiler votre DLL. .Net Les assemblages sont facilement réversibles.

La compilation à nouveau peut résoudre le problème (par exemple, votre DLL de nuget peut sembler être 4.5, pas 4.0).

+0

Les DLL de nuget sont .net4.0, c'est sûr. J'ai utilisé désassembleur et informations d'en-tête dit. Net 4.0. – rplusg