weswes88 Ответов: 2

Произошла ошибка при локальной обработке отчета в C# после помощью смарт ассамблеи


Я разработал приложение C# и использовал средство просмотра отчетов для печати отчетов. смарт-сборочный чтобы объединить все DLL файлы в exe файл
приложение отлично работает при воспроизведении с VB.NET но при использовании smart assemply для слияния dll файлов приложение работает нормально но при попытке распечатать любой отчет отображается ошибка:

"
Error occurred during local report processing
"

я думаю, что exe-файл не может видеть файл отчета > & gt; Как я могу решить эту проблему

Что я уже пробовал:

string dt = DateTime.Now.ToShortDateString();

                var traAmount = 54533.77;
                var from_acc = "45646456434";
                var from_name = "Wess hjg Marko";
                var to_acc = "8686783234";
                var to_name = "Sarah";
                var user_name = "Sarah";
                //====================================================

                string tafq = "";
                Hoorof.clsHoorofArabic horof = new Hoorof.clsHoorofArabic();
                if (float.Parse(traAmount.ToString()) > 999999999.99)
                {
                    tafq = "";
                }
                else if (float.Parse(traAmount.ToString()) <= 0)
                {
                    tafq = "";
                }
                else
                {
                    tafq = horof.تحويل_الأرقام_الى_حروف(Convert.ToDecimal(traAmount.ToString()), 2, "جنيه مصري", " قرش", true, true);
                }
                //====================================================
                DateTime x = Convert.ToDateTime(dt);
                ReportParameter p1 = new ReportParameter("dt", x.ToString("yyyy/MM/dd"));
                ReportParameter p2 = new ReportParameter("amt", traAmount.ToString());
                ReportParameter p3 = new ReportParameter("from_name", from_name);
                ReportParameter p4 = new ReportParameter("from_num", from_acc);
                ReportParameter p5 = new ReportParameter("to_num", to_acc);
                ReportParameter p6 = new ReportParameter("to_name", to_name);
                ReportParameter p7 = new ReportParameter("user_nm", user_name);
                ReportParameter p8 = new ReportParameter("amt_tafkit", tafq);

                rep_view.ProcessingMode = ProcessingMode.Local;
                rep_view.LocalReport.DataSources.Clear();
                rep_view.LocalReport.ReportEmbeddedResource = "FCUBS_Remapping_Tool.Transfer_App.rdlc";

                rep_view.LocalReport.SetParameters(p1);
                rep_view.LocalReport.SetParameters(p2);
                rep_view.LocalReport.SetParameters(p3);
                rep_view.LocalReport.SetParameters(p4);
                rep_view.LocalReport.SetParameters(p5);
                rep_view.LocalReport.SetParameters(p6);
                rep_view.LocalReport.SetParameters(p7);
                rep_view.LocalReport.SetParameters(p8);

                rep_view.LocalReport.Refresh();
                rep_view.RefreshReport();
                rep_view.RenderingComplete += new RenderingCompleteEventHandler(Print_Report);`

2 Ответов

Рейтинг:
1

RickZeeland

Наконец-то он заработал, скачать его можно здесь: WindowsFormsApplication2[^]
Я использовал Фоди Костура, с обычной библиотекой dll Microsoft Reportviewer это не сработало бы (вероятно, неправильный путь ссылки).
Поэтому я установил пакеты Microsoft Reportviewer 2010 NuGet:
- Общие библиотеки Microsoft Report Viewer 2010 SP1
- Microsoft Report Viewer 2010 SP1 Windows Forms

Я не тестировал на "голой" системе, где dll Reportviewer отсутствуют, но я почти уверен, что это сработает.
Дайте мне знать, если все будет работать так, как ожидалось !


weswes88

большое спасибо мистер Рикзиленд
вы правы программа работает хорошо когда tring чтобы открыть ее с ПК есть просмотрщик отчетов на нем
но при попытке открыть его с ПК antoer появляется одно и то же сообщение "ошибка произошла во время локальной обработки отчета"
не могли бы вы объяснить мне разницу между 2-м средством просмотра отчетов и тем, откуда вы его взяли?. и как мы можем решить эту проблему
-----------
важное Примечание ::
вы должны знать, мистер RickZeeland, что EXE-файл при скопировать
Майкрософт.Элемент управления reportviewer.Общие.dll и Microsoft. ReportViewer.ProcessingObjectModel.dll
рядом с ним

RickZeeland

Я точно не знаю, в чем разница между "обычным" Microsoft Reportviewer и пакетом NuGet, но, по-видимому, Fody Costura лучше работает с пакетами NuGet. Хотя Фоды Costura должны иметь меньше проблем с подписью библиотек, чем ILMerge. Возможно, вы можете попробовать добавить другие пакеты Microsoft Reportviewer NuGet, такие как 2012 и 2015, пока он не будет работать на вашем другом компьютере.
Конечно, ваши результате .exe-файла размер будет расти немного :)

weswes88

вы должны знать, мистер RickZeeland, что EXE-файл при скопировать
Майкрософт.Элемент управления reportviewer.Общие.dll и Microsoft. ReportViewer.ProcessingObjectModel.dll
рядом с ним
Как Я Могу Получить Пакеты NutGet 2015

RickZeeland

Чтобы получить пакеты Reportviewer 2015 из NuGet, в Visual Studio goto Tools - NuGet Package Manager найдите "Microsoft Reportviewer 2015".
Для вопросов о Fody Costura, возможно, вы можете создать "проблему" на https://github.com/Fody/Costura или свяжитесь с одним из разработчиков, я не думаю, что у них есть форум.

weswes88

могу ли я использовать crystal report вместо средства просмотра отчетов ??

RickZeeland

В мои ранние вычислительные дни я когда-то использовал Crystal Reports с VB6, но, боюсь, сейчас я не в курсе этого. Так что, может быть, лучше опубликовать это как отдельный вопрос о CodeProject. Если вам нужно только сгенерировать pdf-файл из кода, Вы также можете использовать библиотеку pdf, такую как PDFsharp, http://www.pdfsharp.net.

weswes88

означает ли это, что теперь есть надежда сделать это с помощью средства просмотра отчетов

RickZeeland

Вы имели в виду" никакой надежды"? Я бы так не сказал, но это займет много времени и экспериментов с пакетами NuGet.
Оглядываясь назад, вероятно, было бы проще отказаться от Microsoft Reportviewer и использовать решение с открытым исходным кодом или что-то, что можно было бы объединить более легко.
Тем не менее я нашел это интересным опытом и многому научился !

weswes88

Большое спасибо Мистер Рикзиленд за Вашу помощь и повторы
я рад говорить с вами &ГТ;&ГТ;
Я поищу еще один пакет NuGet и сообщу вам результат
спасибо снова

Рейтинг:
0

RickZeeland

Вам нужно исключить проблемный метод или класс из обфускации.
Если я хорошо помню, SmartAssembly предлагает несколько методов слияния dll-файлов, вы также можете попробовать другой метод.
Если это не сработает, исключите неправильно работающую библиотеку dll из SmartAssembly.
Альтернативами являются использование утилиты ILmerge или Fody Costura:
Майк Барнетт из Microsoft Research[^]
GitHub - Fody/Fody: расширяемый инструмент для создания сборок .net[^]

Пример ILmerge :

ilmerge /target:winexe /out:SelfContainedProgram.exe Program.exe ClassLibrary1.dll ClassLibrary2.dll
Также видеть: Слияние.Сетевые сборки с использованием ILMerge[^]

----------------------------------------------------------------------------------
Еще один пример, который сохраняет имя файла. exe таким же:

Поместите ILMerge в папку ILMerge в вашем решении.

Определить Пост-Сборка событие:
В меню проект выберите пункт Свойства.
Выберите вкладку события сборки.
В поле командная строка события после сборки введите свои команды

Пример:
"$(SolutionDir)\ILMerge\ILMerge.exe" /target:winexe /out:wessam.exe WindowsFormsApplication1.exe Microsoft.ReportViewer.Common.dll Microsoft.ReportViewer.DataVisualization.dll Microsoft.ReportViewer.ProcessingObjectModel.dll Microsoft.ReportViewer.WinForms.dll
DEL WindowsFormsApplication1.exe 
REN wessam.exe WindowsFormsApplication2.exe
----------------------------------------------------------------------------------

Я думаю, что в этой статье есть решение для вашего Проблема ILMerge : Добавление док, РТФ, и вам не потребуется форматы экспорта для Microsoft управления средства просмотра отчетов [^]


weswes88

спасибо RickZeeland для воспроизведения
можете ли вы помочь мне и сказать мне, как я могу использовать ILmerge для слияния средства просмотра отчетов в моем exe-файле

weswes88

я использую этот код раньше, но выходной файл не может открыться
ilmerge / target:winexe /out:SelfContainedProgram.exe Program.exe ClassLibrary1.dll ClassLibrary2.dll

RickZeeland

Нет, вы должны использовать событие post-build, если хотите сделать это из Visual Studio.
Вы должны заменить имена файлов именами ваших файлов.

weswes88

я использовал код выше в файле. csproj следующим образом здесь
а когда сохраните его и перезагрузите проект появится это сообщение ЭТОТ
к сожалению .. можете ли вы сказать мне, как этого действия &ГТ;&ГТ; я не сделал этого раньше .. Милость
это мой код

<PostBuildEvent>
    if $(ConfigurationName) == Release ("$(SolutionDir)\..\VMS\3rdParty libs\ILMerge\ILMerge.exe" /target:winexe /out:Wessam.exe FCUBS_Remapping_Tool_By_Wessam.exe clsHoorof.dll Microsoft.ReportViewer.Common.dll Microsoft.ReportViewer.WinForms.dll Microsoft.ReportViewer.DataVisualization.dll Microsoft.ReportViewer.ProcessingObjectModel.dll
    DEL FCUBS_Remapping_Tool_By_Wessam.exe
    REN Wessam.exe FCUBS_Remapping_Tool_By_Wessam.exe)
  </PostBuildEvent>

weswes88

является ли этот код правильным

"$(SolutionDir)\ILMerge\ILMerge.exe" /target:winexe /out:wessam.exe FCUBS_Remapping_Tool_By_Wessam.exe clsHoorof.dll Microsoft.ReportViewer.Common.dll Microsoft.ReportViewer.DataVisualization.dll Microsoft.ReportViewer.ProcessingObjectModel.dll Microsoft.ReportViewer.WinForms.dll
DEL FCUBS_Remapping_Tool_By_Wessam.exe 
REN wessam.exe FCUBS_Remapping_Tool_By_Wessam.exe

я сделал strps выше и построил проект после сохранения кода
но эта ошибка возникает при компиляции приложения
ЭТОТ

RickZeeland

Команда post-build выглядит правильно для меня, но так как у меня нет вашего проекта и dll, я не могу проверить, правильно ли написаны имена.
Также Ильмерге не идеален, особенно большие и более сложные программы могут дать проблемы ...

RickZeeland

Это может быть, что у вас отсутствует Microsoft.Элемент управления reportviewer.WebForms.dll, даже если он не используется вашим приложением, может быть ссылка на него, которая вызывает ошибку.

weswes88

Здравствуйте мистер рикзиленд Загрузить его
это образец из моего проекта
можете ли вы протестировать код на нем и отправить мне обратную связь

RickZeeland

Хорошие новости, ваше приложение строится и запускается ! но вы должны поместить папку ILMerge в папку решения (где находится файл. sln).
Протестировано с VS2013 Community ed. на Win 10 Home.

RickZeeland

Хммм, он будет строиться только потому, что dll Microsoft.ReportViewer находятся в вашей выходной папке. Перестройка не удалась с ошибкой, которую вы получили.
Единственный способ, которым я мог сделать перестройку, - это включить dll Microsoft.ReportViewer в проект и установить свойство "копировать в выходной каталог" на "копировать всегда".
Не идеально, но это работает, я мог бы сгенерировать pdf-файл и просмотреть его с логотипом и текстом.

RickZeeland

Извините, когда пытался бежать WindowsFormsApplication2.exe автономный он выходит из строя. Никакой разумной информации в журнале событий Windows. Боюсь, что Microsoft. ReportViewer не подходит для слияния с ILMerge. Я думаю, вам лучше попробовать другое решение для создания отчетов или PDF-библиотеку.

weswes88

большое спасибо за ваш Тринг > & gt; можете ли вы прислать мне свой проект после редактирования ..
и я не знаю решения для отчетности пыльника можете ли вы сказать мне что это такое контроль и как использовать его в моем проекте спасибо agin

RickZeeland

Я получил автономный запуск, просто нужно было добавить файл. exe. config !
По-прежнему выдает предупреждение "сильное именование", но оно показывает средство просмотра отчетов.

weswes88

средство просмотра отчетов показывает пустоту и появляется ошибка "строгое именование" >>
что я могу сделать сейчас

RickZeeland

Вам это не понравится, но я думаю, что ответ здесь: https://www.codeproject.com/articles/23966/report-viewer-generate-reports-ms-word-formats?msg=4207320
Цитата: "Мы планируем взломать сборки, изменив их IL-код; поэтому мы будем вынуждены удалить их строгие имена и открытые ключи".
Я сам не использую строгие имена именно из-за такого рода проблем, которые также могут возникнуть, если вы используете сторонние неподписанные dll-файлы в своем подписанном приложении. Но когда у меня будет время, я попробую еще раз.

RickZeeland

Скачать можно здесь: https://1drv.ms/u/s!AqqLYm_bbW5upkp3VipIiylKrScc