2010-06-15 8 views
1

La définition explicite de dépendances dans VS2010 entre un projet C++ non géré et un projet C# est respectée dans VS2010, mais la dépendance est ignorée dans MSBuild 4.0.Problème de dépendance avec MSBuild 4.0 lors de l'exécution de DllImport à partir de C# dans la bibliothèque C++ non gérée

Il est impossible d'ajouter une référence au projet C++ non géré à partir du projet C#, afaik. Comment puis-je m'assurer que l'ordre de construction est correct si une solution contient des projets non gérés et gérés?

+0

Je me rends compte qu'il n'y a rien qui empêche ces deux projets d'être hors service. Malheureusement, certaines étapes post-construction du projet C# dépendent de la sortie du projet Cpp. – GregC

+0

Avez-vous essayé de changer l'ordre de construction de la solution? Faites un clic droit sur la solution, sélectionnez "Solution Build Order ...". Techniquement, les fichiers de solution n'utilisent pas MSBuild. Ils ont ajouté un peu d'un hack pour les convertir en projets MSBuild au moment de la construction, et ce n'est pas parfait :) – ShadowChaser

+0

@ShadowChaser: Il dit "Utiliser l'onglet de dépendance pour ajuster l'ordre de construction." C'est ce que j'ai fait, à en juger par la question. – GregC

Répondre

2

MSBuild comporte un bogue et n'honore pas correctement les dépendances de projet ajoutées au niveau de la solution. Jetez un oeil à http://social.msdn.microsoft.com/Forums/en-US/msbuild/thread/80cc6447-b720-4806-8395-7c257b207613/ et https://connect.microsoft.com/VisualStudio/feedback/details/613284/msbuild-4-does-not-respect-build-order-when-building-a-solution

Une publication par Microsoft sur la page de connexion indique qu'il s'agit d'un bug dans la version 64 bits de MSBuild. Essayez de passer à la version 32 bits pour voir si cela résout le problème.

Si vous ne pouvez pas faire cela, ou cela ne fonctionne pas, il existe deux autres options. Aucun d'eux n'est idéal.

La première option consiste à éditer manuellement le fichier SLN et à modifier l'ordre dans lequel les projets apparaissent dans le fichier pour correspondre à l'ordre de construction souhaité. J'imagine que la solution de Victor serait une bien meilleure idée, car des changements supplémentaires au fichier de solution pourraient finir par écraser les changements à nouveau.

La deuxième option consiste à exporter manuellement le «métaprojet» MSBuild pour la solution et à modifier directement l'ordre de génération et à ajouter les autres personnalisations dont vous avez besoin. D'après ce que j'ai lu, même chez Microsoft, ils ne compilent pas de solution "dogfood" - à la place, ils les évitent complètement pendant les générations et utilisent des fichiers MSBuild personnalisés à la place. Pour générer le métaproj, définissez la variable d'environnement MSBuildEmitSolution sur 1. Après avoir exécuté MSBuild sur la solution, vous devriez voir un fichier ".metaproj" dans le même répertoire - il contient le script que MSBuild génère en mémoire pour être compilé la solution. Vous devriez être en mesure de faire les modifications nécessaires, vérifiez-le, puis définissez le serveur de compilation pour le compiler.

Le problème disparaîtra dans la prochaine version de Visual Studio. La page Microsoft Connect a été publiée par Microsoft pour être corrigée dans la prochaine version, et la rumeur veut qu'ils se débarrassent des fichiers .sln et les remplacent par des projets MSBuild appropriés.