2010-11-22 28 views
2

Nous essayons de mettre à jour notre base de code pour utiliser Visual Studio 2010 mais nous avons des problèmes pour tout trier sur nos serveurs de build. Nous ne souhaitons pas installer Visual Studio 2010 sur nos serveurs de build et n'avons donc installé que le Framework .Net 4 et SDK (v7.1).Différences entre la construction sur une machine avec VS2010 installée et sur une machine avec le SDK 7.1 installé

Nous voulons toujours cibler la plate-forme .Net 3.5 (nous mettrons à niveau vers .Net 4 à un moment donné dans le futur mais nous ne voulons pas encore le faire).

Nous avons réussi à compiler le code, mais nous rencontrons maintenant des erreurs d'exécution comme celle-ci.

Could not load file or assembly 'System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The system cannot find the file specified.

Le problème est que l'exécution tente de désérialiser la ressource intégrée et si je regarde les ressources dans le réflecteur, je vois qu'ils sont tous les objets .Net 4.0. Par exemple, l'icône de notre application Windows est de type System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a. Donc, il semble que MSBuild compile incorrectement les ressources (en utilisant un environnement d'exécution différent de la cible)? J'ai confirmé ceci en regardant les différences de la DLL construite sur ma machine de dev et celle construite sur le serveur de construction - il est clair de voir que les ressources d'un dll utilisent la version 2.0.0.0 et l'autre (du serveur de construction) utilise 4.0 .0.0. Les références de projet sont pour les dll v2.0.0.0 dans les deux cas (comme on pourrait s'y attendre).

Quelqu'un at-il une idée de la raison pour laquelle MSBuild compile les ressources en tant qu'objets 4.0?

Merci d'avance.

Chris

Répondre

3

Lorsque vous mettez à jour votre solution à VS2010, avez-vous changé le cadre ciblé? Vous pouvez le rechercher en affichant les fichiers csproj dans un éditeur de texte. Avez-vous le framework 7.0a dans votre serveur de build?

EDIT:

je suis tombé sur le même problème il y a un certain temps et il a quelque chose à voir avec la clé de Registre non définie. Jetez un coup d'oeil ici: http://connect.microsoft.com/VisualStudio/feedback/details/594338/tfs-2010-build-agent-and-windows-7-1-sdk-targeting-net-3-5-generates-wrong-embedded-resources

Je pense que vous devez ajouter manuellement la clé de Registre HKLM\Software\Microsoft\MsBuild\ToolsVersions\SDK35ToolsPath

+0

Lorsque nous avons amélioré les projets, nous avons gardé la version du framework cible 3.5. Les serveurs de build n'ont pas le SDK 7.0A installé (ils ont le SDK 7.1). [Le 7.0A est installé avec Visual Studio et nous ne l'avons pas installé sur les serveurs de build]. –

+0

SOrry, j'étais fatigué la nuit dernière. Quelle "ToolsVersion" utilisez-vous dans votre csproj? –

+0

Ce lien semble très intéressant - J'ai vérifié sur notre serveur de construction et nous avons les mêmes clés mal nommées. Je suis sûr à 99% que vous avez identifié le problème (donc je vais le marquer comme la réponse): Je n'ai pas essayé le travail parce que, en raison de tous les problèmes que nous rencontrions pour obtenir notre code ciblé 3.5 pour construire ce que nous mettrait à niveau notre solution vers .Net 4.0. –