web-dev-qa-db-fra.com

Pourquoi est-ce que j'obtiens Impossible de charger le fichier ou l'erreur d'assembly sur une System.Configuration DLL lors de l'utilisation du framework 4.0?

Immédiatement après la mise à niveau vers Visual Studio 2010 et le framework 4.0, notre build de tronc a commencé à rompre avec le Impossible de charger le fichier ou l'erreur d'assembly.

Nous avons déterminé qu'un projet 3.5 ne pouvait pas référencer un projet 4.0 sinon nous obtiendrions cette erreur car, comme l'indique l'erreur, Cet assembly est construit par un runtime plus récent que le runtime actuellement chargé et ne peut pas être chargé .

Nous avons depuis résolu cela et le coffre s'est bien construit.

J'ai récemment fait une branche et une balise, cependant, et soudain, cette erreur a refait surface lorsque j'essaie de créer la branche; sauf que l'erreur concerne l'une des références de notre propre projet .net 4.0 à la DLL System.Configuration.

Towps.Namespace.MyService.csproj dans Core.Dev\Towps\Projetcs\Application\MyService:
RG0000: impossible de charger l'assembly référencé

"C:\Windows\Microsoft.Net\Assembly\GAC_MSIL\System.Configuration\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.Configuration.dll".
A détecté une exception BadImageFormatException disant "Impossible de charger le fichier ou l'assembly
'C:\Windows\Microsoft.Net\Assembly\GAC_MSIL\System.Configuration\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.Configuration.dll' ou l'une de ses dépendances.
Cet assembly est construit par un runtime plus récent que le runtime actuellement chargé et ne peut pas être chargé. ". In ResGen (0, 0)

J'ai essayé de définir la propriété de version spécifique sur ce système. Configuration DLL ref à true.
Je peux voir dans ses propriétés que la version d'exécution est v4.0.30319 et la version est 4.0.0.0.
Le chemin d'accès à la DLL ref est C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework.NETFramework\v4. 0\System.Configuration.dll qui pour moi semble bien.

Le framework cible pour le fichier csproj que CrusieControl utilise MSBuild pour essayer de construire cible le framework 4.0. Encore une fois, ça va.

Il se construit dans le IDE pour le tronc et la branche. Cruise Control le construit dans le tronc. La construction de la branche échoue lorsque CrusieControl essaie de construire.

Des idées ce qui pourrait arriver?

Il pourrait s'agir d'une incompatibilité MSBuild, mais j'ai analysé les fichiers de configuration et les fichiers de projet msbuild que CruiseControl utilise et il n'y a aucune référence à des MSBuild plus anciens; ce qui est logique puisque tous ceux-ci ont été mis à jour pour faire fonctionner le coffre.

La branche était simplement une copie du coffre donc j'ai du mal à déterminer quelle pourrait être la différence!

18
topwik

Il s'avère qu'après avoir créé une branche, tous les fichiers .proj dans mon répertoire de construction de branche utilisés par cc.net étaient de retour à l'aide de ToolVerison = "3.5". Je pensais que j'avais validé tous les changements de proj et de configuration ToolsVersion = "4.0" sur le tronc à partir duquel j'ai effectué la branche; évidemment pas.

4
topwik

La différence pourrait facilement être un indice de chemins qui ne s'alignent plus sur la nouvelle branche. Cependant, il n'y a pas de journal pour continuer dans votre description. Quelles sont les options de ligne de commande que vous passez? Dans ccnet.config et tous les autres qui pourraient entrer si ccnet.config pointe sur un script de build qui appelle msbuild au lieu de directement sur un .sln ou .csproj fichier.

Allumer /v:d for the msbuild sur LES DEUX, puis comparez les résolutions de référence (ou ordre de construction, etc.) pour cet assemblage ou d'autres impliquées/proches.

Fournissez-vous également le chemin vers msbuild sur les deux?

msbuild4="C:\WINNT\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe"

<msbuild>
    <executable>$(msbuild4)</executable>

dans votre ccnet.config?

Je l'ai vu signaler l'exécutable de la version 2.0 pendant un msbuild4 /tv:3.5:

<Message Text="MSBuildToolsPath:$(MSBuildToolsPath)" />
<Message Text="MSBuildToolsVersion:$(MSBuildToolsVersion)" />

MSBuildToolsPath:C:\WINNT\Microsoft.NET\Framework\v2.0.50727
MSBuildToolsVersion:2.0

donc cela ne semblait pas très utile.

Je voudrais voir les blocs de configuration pour la branche et le tronc.

Je sais que j'avais des chemins dans le buildscript qui ont échoué dans ma branche car il y avait un chemin codé en dur qui ne serait pas valide pour la branche. J'ai dû régler le ccnet.config pour passer des arguments pour ces éléments à remplacer pour la branche.

2
Maslow

Veuillez vérifier la version du framework .net prise en charge par votre client. Par exemple, sharepoint2010 ne prendra pas en charge les DLL créées par le framework .net 4.0 ou supérieur. Il ne prendra en charge que 3,5 ou moins.

0
raja

Un peu tard, je sais, mais si quelqu'un d'autre a ce problème, essayez d'ajouter le RuntimeVersion dans votre fichier .dna s'il n'existe pas déjà.

<DnaLibrary Name="PROJECTNAME" RuntimeVersion="v4.0">
0
Blueberry