2

Je suis confronté à un problème étrange en essayant de construire en utilisant MSBuild.MSBuild - condition de concurrence en essayant de construire des références de projet

J'utilise MSBuild pour générer un fichier de solution avec/m (build parallèle) et BuildProjectReferences défini sur true. Supposons que j'ai A.vcxproj et B.vcxproj dans le fichier SLN avec B ayant une référence de projet à A. Que se passe-t-il? Un projet commence à construire en premier et alors qu'il est en cours de compilation, le projet B commence à construire dans un autre processus (depuis builds parallèles) et il invoquerait le bâtiment A. Maintenant, cela provoque une condition de concurrence parce que nous avons deux processus essayant de construire le même projet A et je verrais des problèmes d'accès.

Idéalement, MSBuild ne doit pas appeler le bâtiment B si A n'a pas terminé la construction ou s'il invoque B, puis détecter que A est encore en train de construire et attendre qu'il se termine. Rien de tout cela n'arrive. En outre, cela se produit uniquement avec MSBuild - ne se produit pas si j'essaie de générer le fichier de solution à partir de l'IDE VS2015.

Une idée de pourquoi MSBuild se comporte de cette façon?

+0

Quelle version de MsBuild, quelle version Visual C++? Cela peut avoir une influence. – jessehouwing

+0

VS 2015 et MSBuild 14.0 – comingbacktolife

Répondre

1

enfin trouvé la solution à mon problème

MSBuild prévoit que les dépendances du projet soient ajoutées de deux façons
1. Dans le vcxproj lui-même, ajouter tous les projectreference dépendant
2. Dans le fichier sln aussi, Définissez les dépendances du projet. Par exemple, https://blogs.msdn.microsoft.com/vcblog/2010/02/16/project-settings-changes-with-vs2010/ indique que les dépendances de projet et projectreference sont analogues et n'utilisent qu'une seule spécification spécifique.

Cela peut être vrai lorsque vous générez à l'aide de VS IDE mais pas pour MSBuild. Il faut que les dépendances du projet soient définies à la fois sur ProjectReference et ProjectDependencies.

J'espère que cela aidera tous ceux qui ont eu le même problème que moi.