2015-11-14 1 views
1

Je rencontre un problème de dépendance avec MSBuild. J'ai ajouté un package NuGet pour Microsoft.Tpl.Dataflow à un projet dans ma solution. Cela provoque un échec de génération pour un projet de site Web dans la solution qui référence le premier projet. Il semble y avoir un problème avec l'obtention de la version d'exécution correcte.Msbuild ne parvient pas à générer un projet de site Web avec une référence indirecte à System.Runtime

Ceci est l'une des nombreuses erreurs que j'obtiens lors de la construction de la solution avec MSBuild.

C: \ src \ MyWebsite.metaproj: avertissement MSB3268: La référence primaire "C: \ src \ projects \ ReferencedProject \ bin \ Debug \ ReferencedProject.dll" ne pouvait pas être résolu, car il a une participation indirecte dépend de l'assembly de structure "System.Runtime, Version = 4.0.0.0, Culture = neutre, PublicKeyToken = b03f5f7f11d50a3a" qui n'a pas pu être résolu dans le cadre actuellement ciblé. ".NETFramework, Version = v4.5". Pour résoudre ce problème, supprimez la référence "C: \ src \ projects \ ReferencedProject \ bin \ Debug \ ReferencedProject.dll" ou recibler votre application vers une version du framework contenant "System.Runtime, Version = 4.0. 0,0, Culture = neutre, PublicKeyToken = b03f5f7f11d50a3a ".

La chose qui prête à confusion est que la solution se construit correctement dans Visual Studio. En outre, tous les autres projets de la solution sont créés - seuls les projets de site Web échouent.

J'ai essayé

  • Modification du cadre cible pour le site à 4,0 (il est actuellement 4.5).
  • Ajout d'une référence d'assemblage à la version System.Runtime.dll 4.0.0.0

Je ne peux toujours pas à construire. Comment puis-je réparer cela?

Répondre

2

Turns out aspnet_compiler.exe (qui est appelé par msbuild) ne semble pas pour les bibliothèques dans le répertoire Façade à

C: \ Program Files (x86) \ Reference Assemblies \ Microsoft \ Framework.NETFramework \ v4.5 \ Facade

et en tant que tel, le projet de site Web dans la solution ne compilerait pas.

Je l'ai trouvé de this blog post. Comme mentionné ci-dessus, pour résoudre le problème, j'ai copié les DLL du répertoire Facade dans le répertoire v4.5 et tout fonctionne.

Pour être honnête, c'est une solution moins qu'idéale.

+0

Merci pour le partage. – frattaro

+0

Cela nous est également arrivé dans .net 4.7. Je voudrais ajouter que cela ne nous est arrivé qu'en utilisant la ligne de commande msbuild sur un serveur de construction, et non en studio visuel. Bien que cette solution fonctionne également, puisque 4.7 contient également le répertoire Facades, il doit y avoir un meilleur moyen que de copier les fichiers système, ce qui devrait être fait sur tous les serveurs de build. – madamission

+0

Si quelqu'un veut creuser dans ce plus pour essayer de le faire de la bonne façon, ou vérifier pour le signaler à Microsoft, je pense qu'il y a un paramètre msbuild sous-jacent appelé TargetFrameworkDirectories qui manque ce chemin.Quant à savoir comment l'obtenir en utilisant aspnet_compiler, je ne suis pas sûr parce que je ne sais pas si vous pouvez lui passer des paramètres. Pour l'instant, je vais utiliser la solution moins qu'idéale de copier les fichiers. – madamission