Après avoir recherché un grand nombre de messages similaires, j’ai décidé de créer mon propre message.
Compilation Error
Description: An error occurred during the compilation of a resource required to service this request. Please review the following specific error details and modify your source code appropriately.
Compiler Error Message: CS0433:
The type
'Microsoft.Reporting.WebForms.ReportViewer'
exists in both
'c:\Program Files\Microsoft SQL Server\MSRS10_50.MSSQLSERVER\Reporting Services\reportmanager\Bin\ReportingServicesWebUserInterface.dll'
and
'c:\WINDOWS\Assembly\GAC_MSIL\Microsoft.ReportViewer.WebForms\9.0.0.0__b03f5f7f11d50a3a\Microsoft.ReportViewer.WebForms.dll'
Mettre à jour:
La plupart des publications similaires ont pour problème que leurs 2 DLL en conflit ont une version 8.0.0.0 et 9.0.0.0, ou presque. Ou qu'ils résident dans le dossier TEMPORARY. Je ne pense pas que mon problème puisse être résolu de la même manière avec de tels messages.
Il existe sur notre ReportServer un Report.aspx, qui rend un rapport. Je veux remplacer ce fichier par le mien, modifier la mise en page, comme ceci:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Report.aspx.cs" Inherits="WebApplication._Default" %>
<%@ Register
Assembly="Microsoft.ReportViewer.WebForms, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
Namespace="Microsoft.Reporting.WebForms"
TagPrefix="rsweb" %>
<!DOCTYPE>
<html>
<head runat="server"></head>
<body>
<div>
<form id="reportform" runat="server">
<div>
<rsweb:ReportViewer
ID='ReportViewerRoot'
runat='server'
ProcessingMode='Remote'
Height='100%'
Width='100%'
AsyncRendering='False'
SizeToReportContent='True'
/>
</div>
</form>
</div>
</body>
</html>
Cela nécessite une référence à MS.ReportViewer.WebForms.DLL
Mon fichier Project.csproj a ceci:
<Reference Include="Microsoft.ReportViewer.WebForms, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" />
Je n'ai pas pu désinstaller de DLL dans C:\WINDOWS, car il était indiqué que cela était requis pour d'autres applications.
J'ai également essayé de modifier web.config, en ajoutant quelques dépendances, mais je ne savais pas trop ce qui serait utile (cela était utile pour les différences de version mentionnées ci-dessus).
De plus, j'ai ces lignes dans web.config:
<compilation defaultLanguage="c#" debug="false" tempDirectory="C:\Program Files\Microsoft SQL Server\MSRS10_50.MSSQLSERVER\Reporting Services\RSTempFiles\">
<assemblies>
<clear />
<add Assembly="ReportingServicesWebServer" />
</assemblies>
</compilation>
Merci pour votre contribution .. Je suis impatient de recevoir vos suggestions.
La solution satisfaisante!
Lors de l'insertion d'un objet ReportViewer dans l'aspx, la référence DLL est automatiquement ajoutée (et pointe vers le GAC WebForms). J'ai besoin de cette référence (impossible de réussir à référencer manuellement aux DLL GAC), puis je supprime ReportViewer dans l'aspx. De plus, j'ajoute la référence au DLL ReportingServicesWebUserInterface.DLL en conflit. Cela déplace le problème (sortie d'erreur de post) vers VS, au lieu de seulement sur le serveur SSRS.
Lors de l'ajout d'un nouveau ReportViewer (), j'obtiendrai l'erreur dans VS.
La solution est la suivante: donnez un alias à la non-requise DLL (sans l'utiliser réellement dans le code). Cela indiquera au compilateur que cette DLL ne doit pas être utilisée lors de l'utilisation de WebForms. Voir l'image
Report.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Report.aspx.cs" Inherits="MyWebApplication._Default" %>
<!DOCTYPE>
<html>
<head runat="server">
<title></title>
</head>
<body>
<div>
<div style="background-color:Red;width:100px;height:100px;">Hoi</div>
</div>
<form id="formID" runat="server">
test
</form>
<div>haha</div>
</body>
</html>
Report.aspx.cs
public partial class _Default : System.Web.UI.Page
{
ReportViewer ReportViewerRoot;
protected void Page_Load(object sender, EventArgs e)
{
AddRV();
}
public void AddRV()
{
ReportViewerRoot = new ReportViewer()
formID.Controls.Add(ReportViewerRoot);
SetReportViewer();
SetServerReport();
}
public void SetReportViewer()
{
ReportViewerRoot.ID = "ReportViewerRoot";
ReportViewerRoot.ProcessingMode = ProcessingMode.Remote;
}
private void SetServerReport()
{
ServerReport serverReport = ReportViewerRoot.ServerReport;
// Set the report server URL and report path
serverReport.ReportServerUrl = new Uri("http://localhost/reportserver");
serverReport.ReportPath = Request.QueryString["ItemPath"];
serverReport.Refresh();
}
}
Source référence: Procédure pas à pas avec un alias externe
Je résous mon problème Pour supprimer l'assemblage unique de mon Web.ConfigIn My Case Les versions 10 et 11 sont réunies . I Supprimez le code ci-dessous de Config.
<add Assembly="Microsoft.ReportViewer.WebForms, Version=11.0.0.0, Culture=neutral, PublicKeyToken=89845DCD8080CC91"/>
Pas dans cette réponse, mais dans la réponse suivante, j'ai mis la solution satisfaisante !! :)
Cette solution même fonctionne aussi mais n’est pas satisfaisante en ce qui concerne le cycle de développement/lisibilité/maintenabilité.
Mon fichier Report.aspx ne contient que cette ligne:
<%@ Page Language="C#" AutoEventWireup="true"
CodeBehind="Report.aspx.cs" Inherits="WebApplication._Default" %>
Mon rapport.aspx.cs contient du code tel que:
HtmlGenericControl body = new HtmlGenericControl();
HtmlForm form = new HtmlForm();
ReportViewerRoot = new ReportViewer();
Controls.Add(body);
body.Controls.Add(form);
form.Controls.Add(ReportViewerRoot);
Mon ReportManager/Web.config contient des balises supplémentaires telles que:
<!-- added enableSessionState -->
<pages validateRequest="false" enableSessionState="true" />
<httpModules>
<clear />
<!-- added -->
<add name="Session" type="System.Web.SessionState.SessionStateModule"/>
</httpModules>
<httpHandlers>
<!-- added -->
<add verb="*" path="Reserved.ReportViewerWebControl.axd" type="Microsoft.Reporting.WebForms.HttpHandler, Microsoft.ReportViewer.WebForms, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
</httpHandlers>
P.s.:En aucun cas je ne peux combiner le code HTML dans report.aspx avec un reportviewer (ni aspx ni cs) . Je ne peux pas non plus ajouter le ReportViewer de manière dynamique dans l'aspx en utilisant <% AddRV(); %>
P.s.s . Le Web.config m'a aidé à résoudre ces erreurs:
En mode distant, le contrôle Report Viewer requiert que l'état de la session soit activé ou que les informations de connexion de Report Server spécifiées dans le fichier fichier de configuration.
Le gestionnaire HTTP du contrôle Web du visualiseur de rapports n'a pas été enregistré dans le fichier web.config de l'application. Ajoutez-le à system.web/httpHandlers section du fichier web.config.
Aller à
HKEY_CLASSES_ROOT\Installer\Assemblies\Global
rechercher l'assemblage et supprimer la ligne complète en faisant un clic droit dessus et en choisissant supprimer.
Cela peut également se produire si vous avez des applications imbriquées. c'est à dire. App2 à l'intérieur de App1.
Le fichier web.config d'App1 pourrait être dérangé par celui d'App2 Assurez-vous qu'ils ne font pas référence à différentes versions du même assemblage.
Inclut dans web.config une balise dependAssembly pour forcer la version spécifique:
<runtime>
<assemblyBinding xmlns="urn:schemas-Microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Microsoft.ReportViewer.WebForms" publicKeyToken="89845dcd8080cc91" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-14.0.0.0" newVersion="14.0.0.0" />
</dependentAssembly>