Не удалось загрузить файл или сборку PDFsharp

Это длинная ошибка, но я дам вам ключевые детали. Допустим, я выпустил приложение C#, которое включает библиотеку PDFsharp, и у меня есть несколько функций, использующих их, и вот где я получаю ошибку.

Я пытаюсь создать несколько PDF-файлов (через Crystal Report и экспортировать их как PDF), а затем объединить их в один. Ошибок пока нет. Во время слияния я использую функции PDFsharp, я включу приведенный ниже код, чтобы прояснить, вот сложная часть, код работает потрясающе, объединяет PDF-файлы и делает все, но только на моем ПК, я попытался передать приложение (.exe) кому-то else и заставил их работать на своем ПК, он вернулся с ошибкой функции слияния.

Кроме того, просто к сведению: PDF-файлы создаются, только слияние является проблемой, что означает, что программа не может найти файлы, которые ей нужно объединить, она ищет некоторые библиотеки PDFsharp, которые она не может найти. Теперь ошибка не имеет значения, потому что, насколько мне известно, когда приложение выпускается, оно связывает все библиотеки в себе, так что другим пользователям не нужно их включать. Я также включаю другие библиотеки, которые не дают никаких ошибок, поэтому мы можем сделать вывод, что с PDFsharp что-то не так.

Error: System.IO.FileNotFoundException: Could not load file or assembly 'PdfSharp, Version=1.32.3057.0, Culture=neutral, PublicKeyToken=f94615aa0424f9eb' or one of its dependencies.

Еще одна информация: я зарегистрировал все ошибки и попробовал привязки сборок, пулы приложений IIS, выпуск на разных процессорах и почти все, поэтому, пожалуйста, придумайте что-нибудь работающее!

Вот мой код слияния (взят из другого источника):

using (PdfDocument targetDoc = new PdfDocument())
{
    foreach (string pdf in pdfs)
    {
        using (PdfDocument pdfDoc = PdfSharp.Pdf.IO.PdfReader.Open(pdf, 
               PdfSharp.Pdf.IO.PdfDocumentOpenMode.Import))
        {
            for (int i = 0; i < pdfDoc.PageCount; i++)
            {
                targetDoc.AddPage(pdfDoc.Pages[i]);
            }
        }
    }
    targetDoc.Save(targetPath);
}

Как ты добавил свою сборку? файл сборки доступен в папке bin?

Kalyan 17.10.2018 22:12

Я добавил через пакет NuGet, и да, когда я открываю bin \ debug: я вижу библиотеки DLL PDFSharp и несколько дополнительных поддерживающих файлов PDFSharp.

Harshit Arora 17.10.2018 22:15

Вы пробовали включить 32-разрядную поддержку в пуле приложений IIS? Кажется, я припоминаю что-то подобное в старом приложении, над которым мы работали, и которое использовало это.

bhmahler 17.10.2018 22:22

Да, работал, не работал.

Harshit Arora 17.10.2018 22:26

Версия сборки в папке bin такая же, как в исключении?

Kalyan 17.10.2018 23:28

Практическое правило: все файлы, которые компилятор помещает в папку DEBUG (или, что еще лучше, в папку RELEASE), должны быть отправлены, когда вы передаете приложение другим. PdfSharp.dll существует не просто так, поэтому отправьте его.

I liked the old Stack Overflow 18.10.2018 10:50
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
6
3 757
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы должны отправить файл PdfSharp.dll вместе с вашим файлом .EXE (и всеми ссылками на сборки с помощью PdfSharp.dll). Ваш .EXE не включает код из других сборок, на которые вы ссылаетесь во время компиляции, поэтому эти другие сборки должны присутствовать во время выполнения.

Кстати: вы используете версию 1.32 примерно с 2013 года, поэтому вам не хватает всех исправлений ошибок за последние пять лет.

Now, the error holds no meaning because according to my knowledge, when an application is released, it binds all the libraries in itself so that other users don't have to include them.

Для меня это ново. Есть ссылки на эту информацию? Я предполагаю, что сообщение об ошибке верное, а ваше предположение неверно ...
То, что верно для библиотек LIB для C / C++, неверно для файлов DLL Windows. Библиотеки DLL загружаются во время выполнения, поэтому они должны присутствовать на компьютере, на котором выполняется приложение.

Если вам нужно отправить один исполняемый файл, включающий все ваши зависимости, добавьте ссылку на Costura.Fody. Это будет легко включать зависимые библиотеки DLL в качестве ресурсов и загружать их во время выполнения. В противном случае отправляйте библиотеки DLL вместе с исполняемым файлом. Распространение библиотек не требуется только в том случае, если точная версия, на которую имеется ссылка, уже присутствует в GAC целевой машины.

JT. 18.10.2018 12:17

Причина, по которой вам не нужно добавлять system.diagnostics, заключается в том, что пространство имен присутствует в файле system.dll, который уже присутствует в GAC как часть инфраструктуры dotnet. При использовании сторонних dll, таких как «PdfSharp.dll», он должен находиться в папке bin.

pull420 18.10.2018 16:26

@HarshitArora Когда я вызываю «Опубликовать» для приложения, над которым я работаю, я получаю папку с 70 файлами, включая множество файлов System. *. Dll. И если системные библиотеки DLL не находятся в папке программы, они все равно должны быть на компьютере, поскольку они все еще загружаются во время выполнения. C / C++ использует библиотеки в формате LIB, и эти библиотеки включены в EXE-файл. Библиотеки DLL загружаются во время выполнения - даже в прошлом веке, когда мы использовали C / C++ для создания приложений Windows. DLL = Библиотека динамической компоновки (загружается во время выполнения) en.wikipedia.org/wiki/Dynamic-link_library

I liked the old Stack Overflow 18.10.2018 16:40

Другие вопросы по теме