2010-09-07 6 views
1

J'ai un projet d'application Web VS2008 en cours de précompilation sans pouvant être mis à jour. Lorsque j'essaie de charger une page qui doit afficher un rapport RDLC à l'aide de ReportViewer, il affiche simplement une page vide. Cela fonctionne très bien dans une version non précompilée. Quel pourrait être le problème?Pourquoi mon application Web précompilée ne peut-elle pas charger le rapport RDLC?

+0

J'ai posé une question et j'ai répondu à ma propre question, pour référence future par moi-même et d'autres personnes susceptibles de rencontrer le même problème. – Daan

Répondre

4

Le problème est que VS essaie également de compiler les fichiers RDLC, en laissant seulement un fichier de marqueur au lieu du fichier .rdlc d'origine. Le ReportViewer ne peut pas gérer cela et renvoie une erreur. Cela apparaît dans la journalisation comme:

La définition du rapport n'est pas valide. Détails: Les données au niveau de la racine sont invalides. Ligne 1, position 1.

La solution consiste à copier les fichiers RDLC d'origine dans l'application déployée. Cela peut être automatisé dans une étape de post-construction. Voir également this thread pour plus de détails sur l'erreur et this post pour plus de détails sur la modification de l'étape de post-construction pour un projet de déploiement Web. J'ai ajouté ce qui suit à mon fichier de projet Web Deployment:

<ItemGroup> 
    <ReportFiles Include="$(SolutionDir)Path\To\Reports\*.rdlc" /> 
</ItemGroup> 
<Target Name="AfterBuild"> 
    <Copy SourceFiles="@(ReportFiles)" DestinationFolder=".\Release\Reports\" /> 
</Target> 
+0

Cela semble être un sujet intéressant, mais il pourrait y avoir quelques meilleurs articles à ce sujet. Je crois que nous suggérons de décharger le projet, puis l'éditer en ajoutant similaire à ce qui précède, correct? Confusion est que les profils de publication ont le même schéma, et semblent presque comme une autre cible pour un tel. – Greg

0

Ceci peut ne pas être la solution exacte. J'ai essayé dans VS2013 et la précompilation fait partie de la publication processus, pas construire:

http://msdn.microsoft.com/en-us/library/hh475319(v=vs.110).aspx

Options de publication Extraire le fichier, puis sélectionnez Precompile lors de la publication.

L'événement post-build est exécuté avant le processus de publication/de précompilation, le fichier est copié .rdlc avant qu'il (encore) être précompilés. Au moins, ça me ressemble à ça.

0

Votre réponse n » ai pas t travaille pour moi. Ce qui suit a fonctionné pour moi de copier des fichiers après l'aspnet_compiler a couru.

<Target Name="AdditionalFilesForPackage" AfterTargets="CopyAllFilesToSingleFolderForPackage;CopyAllFilesToSingleFolderForMsDeploy"> 
    <ItemGroup> 
    <ExtraFiles Include="$(MSBuildProjectDirectory)\Path_To_Dir\**\*" /> 
    </ItemGroup> 
    <Copy SourceFiles="@(ExtraFiles)" DestinationFiles="@(ExtraFiles->'$(_PackageTempDir)\Path_To_Dir\%(RecursiveDir)%(Filename)%(Extension)')" SkipUnchangedFiles="true" /> 
</Target> 
Questions connexes