Во-первых, перезапустите Visual Studio, очистки и сборки решения в большинстве случаев недостаточно.
Попробуйте выгрузить проект в Visual Studio и отредактируйте файл csproj. Найдите ссылку на этот реквизит в файле. Иногда дублируется текущая версия и одна устаревшая версия. Удалите старый и перезагрузите проект.
Проверьте в своих формах Android / iOS, если csproj
ссылается на ту же версию Xamarin.Forms и не содержит странных линий / символов.
<PackageReference Include="Xamarin.Forms" Version="x.x.x.xxxxx" />
В крайнем случае, попробуйте понизить версию XamarinForms и проверить, помогает ли она.
Мы смогли заставить средство просмотра отчета работать и использовали его в течение прошлых нескольких месяцев в производстве без любых проблем.
Все, кажется, работает отлично.
ОБНОВЛЕНИЕ
Я добавил некоторый код и разъяснение к шагам, которые я первоначально упомянул выше. Ключевой объект, который я не учел, был существует некоторый код позади с заключительным Представлением, таким образом, это будет работать с Crystal Reports. Код позади минимален, но необходимый. Чтобы Crystal Reports работал, Вы собираетесь закончить со следующими файлами:
Детали о том, как создать Представление, которое будет работать с Crystal Reports:
После того как файл Отчета о Кристалле расположения завершается, AllJobsSummaryReportLayout.rpt, мы разрабатываем наш Контроллер. В Контроллере мы берем в любых параметрах, должен был выполнить отчет, назвать Модель, Модель возвращает наш список DTOs, как замечено в отрывке ниже от Контроллера:
var reportViewData = model.AllJobsSummaryQuery(startDate, endDate);
if (0 != reportViewData.Count())
{
var report = new AllJobsSummaryReportLayout();
report.SetDataSource(reportViewData);
report.SetParameterValue("startDate", startDate);
report.SetParameterValue("endDate", endDate);
ViewData["ReportData"] = report;
returnView = "AllJobsSummaryView";
}
else
returnView = "noReportView";
return View(returnView);
Отметьте несколько объектов здесь, мы создаем varible 'отчет', который является типом Кристаллического файла расположения Отчета, AllJobsSummaryReportLayout.rpt, который мы создали выше.
После того как мы создали переменную 'отчета', мы устанавливаем значения источника данных и любые параметры, в которых мы нуждаемся и связываем объект в ViewData.
Теперь давайте смотреть на AllJobsSummaryView.aspx. Этот файл имеет форму на нем со Средством просмотра Crystal Reports и кодом позади файла:
<%@ Page Title="All Jobs Summary Report" Language="C#" AutoEventWireup="true" CodeBehind="AllJobsSummaryView.aspx.cs" Inherits="V.Views.Reports.AllJobsSummaryView"%> <%@ Register Assembly="CrystalDecisions.Web, Version=10.5.3700.0, Culture=neutral, PublicKeyToken=692fbea5521e1304" Namespace="CrystalDecisions.Web" TagPrefix="CR" %> <form id="form1" runat="server"> <div> <a href="/Reports" id="Report"><< Return to Report Main Page</a><br /> <CR:CrystalReportViewer ID="ReportViewer" runat="server" AutoDataBind="True" EnableDatabaseLogonPrompt="False" EnableParameterPrompt="False" HasCrystalLogo="False" DisplayGroupTree="False" HasDrillUpButton="False" HasToggleGroupTreeButton="False" HasViewList="False" HasSearchButton="False" EnableDrillDown="False" EnableViewState="True" Height="50px" ReportSourceID="CrystalReportSource1" Width="350px" /> <CR:CrystalReportSource ID="CrystalReportSource1" runat="server"> <Report FileName="AllJobsSummaryReportLayout.rpt"> </Report> </CR:CrystalReportSource> </div> </form>
И код позади файла:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace V.Views.Reports
{
public partial class AllJobsSummaryView : ViewPage
{
protected void Page_Init(object sender, EventArgs e)
{
ReportViewer.ReportSource = ViewData["ReportData"];
}
protected void Page_Unload(object sender, EventArgs e)
{
((AllJobsSummaryReportLayout)ViewData["ReportData"]).Close();
((AllJobsSummaryReportLayout)ViewData["ReportData"]).Dispose();
}
}
}
Page_Unload является ключевым, без него Вам генерирует ошибку Crystal Reports, 'Вы превысили макс. количество отчетов, установленных Вашим администратором'.
Этот метод все еще работает в продуктивной среде в течение хорошо более чем двух лет теперь.
Если это будет управлением сервером, то оно не будет работать. ASP.NET MVC не использует обратных передач, так большая часть управления сервером веб-форм, не функционирует.
То, что можно сделать, встраивают средство просмотра отчета в iFrame и производят это в представлении MVC. iframe может указать на страницу за пределами материала MVC, сказать в подпапке под названием Наследие или что-то.