System io fileloadexception не удалось загрузить файл или сборку

Обновлено: 07.07.2024

System.IO.FileLoadException: Не удалось загрузить файл или сборку "Google.Apis, Version=1.49.0.0, Culture=neutral, PublicKeyToken=4b01fa6e34db77ab" либо одну из их зависимостей. Найденное определение манифеста сборки не соответствует ссылке на сборку. (Исключение из HRESULT: 0x80131040)
Имя файла: 'Google.Apis, Version=1.49.0.0, Culture=neutral, PublicKeyToken=4b01fa6e34db77ab' ---> System.IO.FileLoadException: Найденное определение манифеста сборки не соответствует ссылке на сборку. (Исключение из HRESULT: 0x80131040)

Ситуация:
Есть задача поиграться с GoogleSheets API со стороны Creatio, для этого нужно установить соответствующие библиотеки.
Сначала я создал консольный проект в VS и через nuget поставил либы Google.Apis.Sheets.v4 - https://www.nuget.org/packages/Google.Apis.Sheets.v4/
Подтянулись либы GoogleSheets и зависимые тоже, в том числе Google.Apis v 1.49.0.0. Протестировав на консольном проекте, где все работало, я решил поставить эти же либы в Creatio, прикрепив их как сборки к пакету.
После компиляции приложения вылезло предупреждение что уже существует либа Google.Apis, только другая - "Google.Apis, Version=1.1.4547.22925, Culture=neutral, PublicKeyToken=edaadfbc3b0bb879" как я понимаю на ней работает синхронизация календаря и ещё что то там и возможны конфликты, но предупреждение это не ошибка, по этому я пошел дальше и использовал классы новой либы версии 1.49, и тут же получил ошибку которую написал выше.

На счет зависимостей странность:
Я скачал сборку старую Google.Apis что бы пощупать и сразу увидел зависимость от либы "Newtonsoft.Json 4.0.4.0" хотя в системе Creatio эта же либа работает в версии 12.0.0.0. Как в системе могут присутствовать сборки которые используют в одно и то же время разные версии сборки?

Возможные решения:
1. Переписать календарь и другой функционал под новую версию либы, удалив старую, но потом обнова и gg.
2. Попробовать сделать отдельный сервис где то "во вне" и поставить туда нужные мне либы и заделать этот сервис как посредник между гуглом и Creatio.
3. Подскажите свое, что я упускаю?

это моя проблема:

система.ИО.FileLoadException: не удалось загрузить файл или сборку - Система.Данные.Базы данных SQLite версии=1.0.88.0, культуры=нейтральный, PublicKeyToken=db937bc2d44ff139' или одна из его зависимостей. Приложение не удалось запустить, потому что его бок о бок
неверная конфигурация. Пожалуйста, смотрите событие приложения войдите или используйте программу командной строки sxstrace.exe инструмент для более подробной информации.
(Исключение из HRESULT: 0x800736B1) имя файла: - Система.Данные.Базы данных SQLite, Версия=1.0.88.0, культура=нейтральный, PublicKeyToken=db937bc2d44ff139' ---> Система.Во время выполнения.InteropServices.Исключение comexception (0x800736B1): Приложение не удалось запустить, потому что его бок о бок
неверная конфигурация. См. журнал событий приложения или используйте программу командной строки sxstrace.exe инструмент для более подробной информации.
(Исключение из HRESULT: 0x800736B1) в Симпб.конфиг.PrepareDatabase() на Симпб.конфиг.InitializeProgram() в Симпб.Программа.Main ()

на моем компьютере работает Windows 7 32 бит, Visual Studio 2010.

на другом компьютере также работает Windows 7 32 бит, без установленной Visual Studio.

что я пробовал:

Попытка 3: попробуйте эти коды в приложении.config:

попытка 4: попробуйте отключить контроль учетных записей пользователей на другом компьютере. Сделанный.

Попытка 5: попробуйте установить Visual C++ Runtime на другом компьютере (я устанавливаю распространяемый пакет Visual Microsoft Visual C++ Runtime 2010 (x86), также попробовал 2005 verson.). Сделанный.

попытка 8: дважды подтвердите, что на другом компьютере работает 32bit Windows 7. Сделал

попытка 9: измените объявление HintPath .файл csproj:
Измените это:

готово за попытку 9.

после вышеуказанных попыток результат все тот же. Приложение может работать с моего компьютера нормально и не удалось запустить на другом компьютере.

сборка не может быть расположена из-за объявления HintPath в ваш .файл csproj:

это работает на вашей машине, потому что у вас действительно есть .dll файлы в этом месте. Однако другой человек может захотеть использовать систему.Данные.Базы данных SQLite.DLL файл размещен в корневом каталоге репозитория. Поскольку это на один уровень выше .csproj, вы можете использовать относительный путь, например:

и он должен работать нормально.

Я решил проблему. Вот как я решаю:

краткий сюжет:
Используйте более старую версию системы.Данные.Базы данных SQLite. Новая версия подозревается в наличии ошибок (я мог ошибаться).

долгая история:
Я начал вспоминать, почему моя предыдущая старая версия этой программы может быть выполнена на другом компьютере, а эта новая версия не может. Какие очевидные изменения я внес?

Да, я изменил версию системы.Данные.Базы данных SQLite.

затем я решил отказаться от новой версии (V1.0.88) и использовали старую версию (V1.0.66) и все вернулось в норму. Программа снова исполняется на другом компьютере.

Я предполагаю, что В1.0.88 содержит ошибки, но я могу ошибаться. Во всяком случае, что касается текущего решения, я просто придерживаюсь В1.0.66.

У меня также были проблемы с SQLite с v1.0.66 в машинах x64/x86. Я никогда не мог установить ServiceStack, а затем SqLite.x86 с пакетом nuget и заставить его работать из коробки.

но сегодня я изменил процесс установки с succes, и это может быть решение также для вас. Я подозреваю,что проблема в том, что версия системы.Данные.SQlite не выровнен с одним Servicestack.Ormlite.SqliteNET ожидает.

следующий процесс в консоли Nuget заставляет вещи работать для меня:

в вашем приложении.файл конфигурации, добавьте эти строки внутри <configuration> элемент:
<runtime> <loadFromRemoteSources enabled="true"/> </runtime>

проверьте, работает ли MS Visual C++ с распространяемой установкой, как система.Данные.SQLite зависит от него.

Я получаю следующую ошибку .

Я пробовал следующее:

Это ошибка? Есть ли обходной путь? Любая помощь приветствуется.

У меня была та же проблема, и я не нашел предлагаемых решений. Мое решение этой проблемы: проверьте App.config и packages.config, чтобы узнать, совпадают ли версии.

Первоначально мой app.config содержал:

Но файл packages.config содержал:

Я изменил запись app.config, чтобы она соответствовала packages.config для новой версии:

После изменения проблема была решена.

Я вытащил «4.3.0» из NuGet, но по какой-то причине VS настаивает на том, чтобы я ссылался на «4.1.2.0», у меня сработала аналогичная работа, только с другим номером версии . У меня была такая же проблема, как у @DavidRogers в проекте MSTest. Объединение различий между app.config и packages.config решило проблему. да, большое спасибо ! Это было решение для моего MSTest, который не нашел тестов [MSTest][Discovery] Failed to discover tests from assembly Reason:Could not load file or assembly 'System.Reflection, Version=4.1.1.0 etc Решение сработало для меня. Проблема началась после установки HtmlAgilityPack NUGET. И не запускался из-за неправильной информации о версии в пакетах. +1

Приведенное ниже больше не нужно, оно было исправлено около VS 15.3:

Был известная ошибка VS2017 , особенно в NuGet 4.0.

NuGet 4.x приносит с собой «ссылку на пакет» - больше никаких пакетов.config, - но старый конвейер 4.x не был полностью обновлен на момент запуска VS2017. Приведенный выше фрагмент, кажется, «разбудит» систему сборки для правильного включения ссылок на пакеты из зависимостей.

Какое обновление Visual Studio 17? Можете указать версию? У меня все еще проблема в 15.5.5 VS2017. Похоже, есть и другие причины.

Я недавно столкнулся с этой проблемой, и я пробовал много вещей, упомянутых в этой и других ветках. Я добавил ссылку на "System.Runtime" пакет для диспетчера пакетов nuget, исправил повторные привязки app.config и убедился, что app.config и package.config для сборки используется та же версия. Однако проблема не исчезла.

Наконец-то снял <dependentAssembly> бирку для сборки и проблема исчезла. Итак, попробуйте удалить следующее в вашем app.config .

Основываясь на вашем ответе, я проверил свои пакеты nuget и обнаружил, что между моими проектами требуется «Google.protobuf» (консолидация), Было бы полезно лучше объяснить, почему это сработает. Проблема с этим методом заключается в том, что всякий раз, когда вы обновляете какой-либо пакет nuget или добавляете новый пакет nuget, он будет добавлен снова.

Я решил эту ошибку, сославшись на NetStandard.Library и следующий файл app.config в NUnit-Project.

редактировать

Редактировать 2

Автоматическое создание переадресации привязки

В новых версиях Visual Studio (я думаю, 2017 15.8) возможно, что Studio создаст файл app.config. Просто установите флажок Автоматически создавать перенаправления привязки в Project-Properties - Application .

Редактировать 3

Я исправил это, удалив app.config с помощью

app.config был автоматически добавлен (но не нужен) во время рефакторинга

Это сработало для меня! Обязательно попробуйте это, если все остальное у вас не работает

<dependentAssembly> <assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/> <bindingRedirect oldVersion="0.0.0.0-4.1.2.0" newVersion="4.1.2.0"/> </dependentAssembly>

Я исправил свою ошибку, установив NetStandard.Library в свой проект модульного тестирования.

Мы обнаружили, что AutoGenerateBindingRedirects может быть причиной этой проблемы.

Замечено: один и тот же проект нацелен net45 и netstandard1.5 был успешно построен на одной машине и не был построен на другой. На машинах были установлены разные версии фреймворка (4.6.1 - успешно и 4.7.1 - неудачно). После обновления фреймворка на первой машине до версии 4.7.1 сборка также не удалась.

Загляните в это прямо сейчас в проекте модульного теста после добавления MsTest V2 через Nuget. Переименование app.config (столь эффективное его удаление) помогло мне.

но один пакет также добавил ту же сборку в зависимости от другой версии:

удаление тега «добавить сборку» из моего файла web.config решило проблему.

В app.config или web.config добавьте

Похоже, проблема возникает из-за конфликта версий между packages.config и app.config. В app.config у вас есть перенаправления привязки сборки, автоматически генерируемые функцией AutoGenerateBindingRedirects. Если этот параметр включен каждый раз, когда вы загружаете пакет nuget, он будет, помимо создания новой записи в packages.config, добавлять эту информацию о перенаправлении привязки в app.config. Какова цель этого, объясняется здесь: Перенаправление привязки сборки: как и почему?

Там вы можете прочитать, что написал пользователь @Evk:

Зачем вообще нужны привязки перенаправления? Предположим, у вас есть приложение A, которое ссылается на библиотеку B, а также на библиотеку C версии 1.1.2.5. Библиотека B, в свою очередь, также ссылается на библиотеку C, но версии 1.1.1.0. Теперь у нас конфликт, потому что вы не можете загружать разные версии одной и той же сборки во время выполнения. Чтобы разрешить этот конфликт, вы можете использовать перенаправление привязки, обычно к новой версии.

Итак, БЫСТРОЕ ИСПРАВЛЕНИЕ: удалите все записи в app.config.

В моем случае, просто благодаря этому программа начала работать, но она, вероятно, будет работать только в том случае, если у вас нет конфликтов версий одной и той же сборки во время выполнения.

enter image description here

Я пытаюсь использовать CefSharp для загрузки моего веб-приложения в winfoms. Я добавил 2 файла dll: CefSharp.dll и CefSharp.WinForms в ссылки и добавьте 2 файла dll icudt.dll и libcef.dll в свой проект, добавив существующие элементы.

и это код из формы

При запуске приложения я получил эту ошибку

Произошло необработанное исключение типа "System.IO.FileLoadException" в WindowsFormsApplication1.exe Дополнительная информация: Не удалось загрузить файл или сборку "CefSharp.dll" или одну из ее зависимостей. Динамическая библиотека ссылок (DLL). (Исключение из HRESULT: 0x8007045A)

Итак, любой, кто знает об этом, помогите мне, спасибо

ОТВЕТЫ

Ответ 1

Вам нужно поместить эти файлы

в папку bin\Debug (или bin\Release в вашей конфигурации)

И не забудьте установить Распространение Visual С++ 2012 (Visual С++ 2013, распространяемый с версии 43), если вы не используете Visual Studio, всегда будет отображаться исключение Скажите, не нашли CefSharp.dll, хотя у вас уже есть это!

Надеюсь на эту помощь.

Ответ 2

Это обычная проблема и поэтому упоминается в часто задаваемых вопросах, вопрос номер 3.

@AcccessDenied является правильным. Файлы должны присутствовать в папке вывода (bin\Debug или bin\Release). Один из способов сделать это - с помощью действия Post-Build , которое можно установить в настройках проекта в Visual Studio.

Вы также можете настроить пост-сборку в файле .csproj , примерно так:

(Этот пример взят из проекта CefSharp.Wpf.Example в исходном коде CefSharp, ветке CefSharp3. Точные местоположения файлов могут отличаться в вашем в случае использования CefSharp1, поэтому при необходимости адаптируйте его, чтобы обеспечить правильное копирование файлов.)

Я не рекомендую помещать вещи в bin\Debug или bin\Release и добавлять их к решению с помощью Copy Always . Для меня это похоже на клочок.

Ответ 3

У меня были проблемы с этим, и я сделал следующее:

добавлен следующий код во время запуска, чтобы гарантировать наличие всех зависимостей

Ответ 4

Вот список минимально необходимых файлов:

Ответ 5

Вы должны установить свойства "копировать для вывода" файлов на "копировать всегда" или "копировать, если они более новые". Это копирует все файлы в выходной каталог, как указано Coder.

Ответ 6

В моем случае я следовал шагам, изложенным в CefSharp - Наш Кодовый Мир.

Вместо того, чтобы следовать шагу A и добавить CefSharpAnyCpuSupport в csproj и probing в App.config , просто установив Platform Target значение x86 на шаге B, добился Platform Target .

Ответ 7

Рекомендуется использовать пакет NuGet. Даже тогда вам нужно внести некоторые неинтуитивные изменения, но они задокументированы. При новой установке пакета открывается файл readme.txt с наиболее распространенными проблемами.

В моем случае я пропал (x64 также доступна)

Мой App.config выглядит следующим образом (с CommonServiceLocator в нем, игнорируйте эту часть, если у вас его нет)

Ошибка возникает из-за того, что в папке bin действительно нет библиотеки Cefsharp DLL, когда вы устанавливаете проект в AnyCPU. Но в папке x86 и x64 ниже, где вы проверяете, добавляя эту строку, DLL существует. Временное исправление - копировать содержимое из /bin/x86 в /bin.

Если требуется AnyCpu, CefSharpAnyCpuSupport необходимо добавить в файл csproj. Необходимо установить флаг проекта для Prefer 32bit.

Ответ 8

У CEF Sharp есть часто задаваемые вопросы, и это один из их наиболее часто задаваемых вопросов. У них есть список шагов, чтобы попытаться решить эту проблему:

Читайте также: