Это длинная ошибка, но я дам вам ключевые детали. Допустим, я выпустил приложение 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);
}
Я добавил через пакет NuGet, и да, когда я открываю bin \ debug: я вижу библиотеки DLL PDFSharp и несколько дополнительных поддерживающих файлов PDFSharp.
Вы пробовали включить 32-разрядную поддержку в пуле приложений IIS? Кажется, я припоминаю что-то подобное в старом приложении, над которым мы работали, и которое использовало это.
Да, работал, не работал.
Версия сборки в папке bin такая же, как в исключении?
Практическое правило: все файлы, которые компилятор помещает в папку DEBUG (или, что еще лучше, в папку RELEASE), должны быть отправлены, когда вы передаете приложение другим. PdfSharp.dll существует не просто так, поэтому отправьте его.
Вы должны отправить файл 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 целевой машины.
Причина, по которой вам не нужно добавлять system.diagnostics, заключается в том, что пространство имен присутствует в файле system.dll, который уже присутствует в GAC как часть инфраструктуры dotnet. При использовании сторонних dll, таких как «PdfSharp.dll», он должен находиться в папке bin.
@HarshitArora Когда я вызываю «Опубликовать» для приложения, над которым я работаю, я получаю папку с 70 файлами, включая множество файлов System. *. Dll. И если системные библиотеки DLL не находятся в папке программы, они все равно должны быть на компьютере, поскольку они все еще загружаются во время выполнения. C / C++ использует библиотеки в формате LIB, и эти библиотеки включены в EXE-файл. Библиотеки DLL загружаются во время выполнения - даже в прошлом веке, когда мы использовали C / C++ для создания приложений Windows. DLL = Библиотека динамической компоновки (загружается во время выполнения) en.wikipedia.org/wiki/Dynamic-link_library
Как ты добавил свою сборку? файл сборки доступен в папке bin?