MSBuild utilise la mauvaise Version D'Assembly pour compiler le fichier RDLC

j'utilise le contrôle reportviewer de VS 2010 pour créer des rapports côté client (rdlc). Tout fonctionne très bien sur ma machine de développement, et quand je compile manuellement (via VS2010) et me déploie manuellement sur une machine de test qui n'a pas d'outils de développement installés.

pour faire fonctionner la machine d'essai (sans installer VS2010 ou ReportViewer).exe), j'ai dû ajouter des références dans mon projet de Microsoft.ReportViewer.Winforms, Microsoft.ReportViewer.Commune et Microsoft.ReportViewer.ProcessingModel et les avoir tous "copie locale".

j'ai configuré les fichiers rdlc pour Build Action => ressources intégrées. C'est le paramètre par défaut lors de l'ajout d'un nouveau rdlc pour le projet. Je suis ouvert à configurer ceci autrement si cela résoudrait ce problème (aucune idée si elle est liée).

le problème: depuis l'ajout des fichiers rdlc, la solution ne repose plus sur le serveur de compilation. J'ai installé ReportViewer.exe sur le serveur de construction, et avoir vérifié que les assemblages requis existent dans le GAC. Le framework .Net 4 n'est pas installé sur le serveur de compilation--Je ne pense pas que cela soit nécessaire parce que la solution cible l'exécution 3.5.

je crois que la racine du problème est le suivant à partir de la build log:

Cible "RunRdlCompiler": Construction cible "RunRdlCompiler" complètement. Fichier de sortie "objReleaseRdlCompile.compilé" n' ne pas exister. Utilisation de la tâche "RdlCompile" de Assemblée "Microsoft.ReportViewer.Commun, Version = 9.0.0.0, Culture = neutre, PublicKeyToken=b03f5f7f11d50a3a". Tâche "RdlCompile": ReportRDLCGreenReport.rdlc (0,0): error rsInvalidReportDefinition: The définition de rapport n'est pas valide. Détails: la définition du rapport a une invalide espace de noms cible 'http://schemas.microsoft.com/sqlserver/reporting/2008/01/reportdefinition" qui ne peut pas être mis à niveau.

De ce que je peux dire, Microsoft.ReportViewer.La version courante 10.0.0.0 est ce qui doit être utilisé pour "compiler" le rdlc, mais MSBuild semble utiliser 9.0.0.0. Je crois que si je pouvais la forcer à utiliser la bonne version (qui est installée dans le GAC), la solution se compilerait.

12
demandé sur Phil Sandler 2010-07-01 00:15:21

10 réponses

C'est parce que votre Microsoft.Commun.Objectifs de fichier pointant vers la version 9.0 de l'assemblée.

Si vous regardez dans [sysdir]\Microsoft.NET\Framework\v3.5 vous trouverez Microsoft.Common.targets, ce qui conduit beaucoup de ce que fait MSBuild. Ce verion du fichier des cibles communes indique [Program Files]\MSBuild\Microsoft\VisualStudio\v9.0\ReportingServices\Microsoft.ReportingServices.targets forcer MSBuild courir avec la version 9.0.

lorsque vous avez installé .NET 4.0, vous avez un nouveau fichier cible commun dans la v4.0.x annuaire, ce nouveau ici [Program Files]\MSBuild\Microsoft\VisualStudio\v10.0\ReportingServices\Microsoft.ReportingServices.targets qui points à la version 10.0 de la ReportViewer assemblées.

le rapport 10.0 Viewer est compilé par rapport à .NET 3.5 et devrait fonctionner à la fois en 3.5 et 4.0. Vous pourriez très probablement vous débarrasser du .net 4.0 framework, et modifier votre fichier cible 3.5 common targets pour pointer vers le nouveau fichier cible ReportingServices, et cela devrait fonctionner. En théorie, de toute façon, je n'ai jamais réellement essayé. Il est peut-être préférable de vous en tenir à la version 4.0, car c'est ce que nous avions prévu lorsque nous avons conçu le support MSBuild pour le nouvel observateur.

7
répondu Matt Greer 2010-07-01 18:24:18

il suffit d'installer Microsoft Report Viewer 2010 SP1.

6
répondu mzain 2012-05-16 12:39:41

j'ai eu un problème similaire. Tout d'un coup, je ne pouvais plus construire un projet VS2010 qui contenait un .fichier rdlc. Je n'étais pas en train de convertir des rapports ou d'utiliser un serveur de rapports, tout était local. J'ai essayé de créer un tout nouveau projet et d'ajouter un nouveau rapport rdlc vide et j'ai frappé build et ça n'aurait pas marché. Juste un jour, il a arrêté de compiler et m'a donné l'erreur suivante:

The report definition is not valid. Details: The report definition has an invalid target namespace 'http://schemas.microsoft.com/sqlserver/reporting/2008/01/reportdefinition' which cannot be upgraded.

il S'avère que le problème était mon "C:\Program dossiers (x86)\MSBuild\Microsoft\VisualStudio\v10.0\ReportingServices \ Microsoft.ReportingServices.le fichier targets avait quelque peu changé. Du haut de mon fichier:

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <UsingTask TaskName="Microsoft.Reporting.RdlCompile" AssemblyName="Microsoft.ReportViewer.Common, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>

Et:

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <UsingTask TaskName="Microsoft.Reporting.RdlCompile" AssemblyName="Microsoft.ReportViewer.WebForms, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>

j'ai changé la ligne "utiliser la tâche" dans le fichier et tout se construit à nouveau. Vraiment frustrant et ça m'a bouffé deux jours de ma vie. En espérant poster ce commentaire peut aider quelqu'un d'autre dans une situation similaire.

Jim Lafler

4
répondu Jim Lafler 2012-03-07 12:35:51

j'ai essayé de tout réinstaller et ça n'a pas marché. Ensuite, j'ai essayé la mise à jour Microsoft.ReportingServices.cibles selon le post de Jim mais n'a même pas travaillé pour moi.

À la fin, j'ai juste copié Microsoft.ReportingServices.cibles depuis une autre machine (où il fonctionnait sans erreur). Et étonnamment, c'est le travail.

supplémentaires différence que j'ai remarqué en comparant, pour changer Publiceytoken avec Version.

ce peut être le cas pour moi seulement, mais le post de Jim a été très utile.

SFUH

3
répondu SFUH 2012-11-13 08:35:06

il S'avère que j'avais besoin du Framework .Net 4.0, et plus précisément du 4.Version x de MSBuild, qui utilise la nouvelle version de Microsoft.ReportViewer.Bibliothèque commune.

donc même si vous ciblez le framework 3.5, si vous créez le rdlc avec VS2010, il s'attendra à être "compilé" en utilisant les outils 4.0.

2
répondu Phil Sandler 2010-07-01 18:14:04

j'ai le même problème: nous utilisons ReportViewer 2012 (la version des assemblages commence par 11). Tant sur les machines locales que sur la machine de construction sont installés ReportViewer 2012 paquet et VisualStudio 2013. Sur les machines locales, la compilation en VS réussit, mais sur la machine de compilation en file d'attente, MSBuild lance une telle erreur:

The report definition is not valid. Details: The report definition has an invalid target 
namespace 'http://schemas.microsoft.com/sqlserver/reporting/2010/01/reportdefinition' 
which cannot be upgraded.

j'ai essayé de modifier Microsoft.Commun.cibles à partir du dossier .net 3.5 de manière, qui est décrit dans ce post, mais aucun effet. Puis j'ai ouvert Microsoft.Commun.les cibles .NET 4.0 dossier, et y a trouvé de telles chaînes:

<!-- VS10 without SP1 and without VS11 will not have VisualStudioVersion set, so do
that here -->
<PropertyGroup>
<VisualStudioVersion Condition="'$(VisualStudioVersion)'
==''">10.0</VisualStudioVersion>
</PropertyGroup>

puis j'ai réalisé que le problème pouvait être dans la valeur incorrecte de la variable $(VisualStudioVersion), donc j'ai ajouté à la définition de build dans la section "Process" ce paramètre MSBuild:

/p:VisualStudioVersion=12.0

et ça a marché! Construire terminée avec succès. Espérons que cela aidera quelqu'un.

2
répondu Sergey 2014-04-19 18:27:27

coller les chemins de fichier ne semble pas être en train de passer... comment à ce sujet:

A:

TaskName="Microsoft.Reporting.RdlCompile" AssemblyName="Microsoft.ReportViewer.Common, Version=8.0.0.0...

Et est désormais la suivante:

TaskName="Microsoft.Reporting.RdlCompile" AssemblyName="Microsoft.ReportViewer.WebForms, Version=10.0.0.0...

James

1
répondu James 2011-10-04 19:00:49

la Politique NetFx40_LegacySecurityPolicy a été activée dans mon devenv.EXE.config, et quand je commente cette ligne, le projet a construit avec succès.

nous avions permis à l'ancienne politique de sécurité de notre équipe de permettre à notre équipe de travailler avec les commandes DevExpress 7.2 de Visual Studio 2010, mais dans ce cas, cela montre que l'approche que nous avons adoptée n'est pas toujours la meilleure.

0
répondu Tim Ferrell 2013-05-13 16:10:39

j'ai perdu 2 jours complets de développement en raison d'un problème similaire. En construisant mon projet il réussirait, mais en reconstruisant il a échoué sans aucune erreur. En étudiant le journal de construction verbose dans la fenêtre de sortie, il m'a dirigé vers un problème avec la fonction rdlcompile (ainsi, le problème d'intégration du rapport local des services de rapports). Après avoir essayé toutes les choses que j'ai finalement réussi à résoudre le problème, mais désactivant mon scanner de virus. L'Antivirus interférait avec ma reconstruction et a causé la reconstruction échouer.

Après la désactivation de la recherche de virus, de reconstruire fonctionne à 100%

0
répondu user2239566 2013-11-04 14:30:00

j'ai le même problème sur mon Visual Studio 2013. La version de la dll de service de reporting sur mon projet est Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a

quand j'ai vérifié mes cibles de Reportservices

j'ai trouvé la version de tâche est 11.0.0.0

<UsingTask TaskName="Microsoft.Reporting.RdlCompile" AssemblyName="Microsoft.ReportViewer.WebForms, Version=11.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91"/>

quand j'ai changé la version de la tâche en 10.0.0.0 correspondant à la version dll de mon projet.

<UsingTask TaskName="Microsoft.Reporting.RdlCompile" AssemblyName="Microsoft.ReportViewer.WebForms, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>

Il a travaillé.

0
répondu ChiaHoYu 2014-11-17 02:02:16