Не удалось загрузить файл или сборку «Microsoft.Data.Edm»

36

Мы используем пакет NuGet для хранения Windows Azure версии 4.1.0, это зависит от Microsoft.Data.OData и добавило этот пакет, а также dll Microsoft.Data.Edm. Когда мы создаем и запускаем приложение, мы иногда получаем следующую ошибку:

Could not load file or assembly 'Microsoft.Data.Edm' or one of its dependencies. The
located assembly manifest definition does not match the assembly reference. (Exception
from HRESULT: 0x80131040)

Мы имеем следующую переадресацию связывания в web.config, а также проверили, и это единственная версия Microsoft.Data.Edm, на которую ссылаются любые проекты в решении.

  <dependentAssembly>
    <assemblyIdentity name="Microsoft.Data.Edm" publicKeyToken="31bf3856ad364e35" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-5.6.1.0" newVersion="5.6.1.0" />
  </dependentAssembly>

Иногда, когда я смотрю в папку bin, я нахожу DLL-версию Microsoft.Data.Edm v 5.6.0. Я прошел через все проекты, и я не могу найти ссылку на Microsoft.Data.Edm, кроме как с клиентом хранения, и это определенно 5.6.1.

Каков наилучший способ попытаться найти работу с версией 5.6.0? Когда мы получаем эту ошибку, мы удаляем папки bin и obj и перестраиваем, а затем она работает нормально, версия 5.6.1 есть и все работает, но в конечном итоге это происходит снова.

EDIT:

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

Possible conflicts for Microsoft.Data.Edm:

Microsoft.Data.OData      references Microsoft.Data.Edm, Version=5.6.2.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
Microsoft.Data.Services.Client references Microsoft.Data.Edm, Version=5.6.2.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
Microsoft.WindowsAzure.Storage references Microsoft.Data.Edm, Version=5.6.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35

Possible conflicts for Microsoft.Data.OData:

Microsoft.Data.Services.Client references Microsoft.Data.OData, Version=5.6.2.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
Microsoft.WindowsAzure.Storage references Microsoft.Data.OData, Version=5.6.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35

То, что я не понимаю, - это набор перенаправлений привязки приложения, но когда-то копируется версия 2.6.0, а иногда и 2.6.2. Кто-нибудь знает, почему это происходит, никогда раньше не было этой проблемы.

  • 0
    Возможно ли, чтобы кто-то зарегистрировал версию сборки виновника из папки bin?
  • 0
    Вы можете попытаться установить CopyLocal = True на ваши ссылки.
Показать ещё 1 комментарий
Теги:
azure
dll

10 ответов

20

У меня было такое же сообщение об ошибке, но моя проблема не была связана с любым продуктом Azure. В моем случае я обновил OData с версии 3 до 4, и мне кажется, что Nuget оставил обязательные переадресации для устаревших dll. Всего было всего три: Microsoft.Data.Edm, Microsoft.Data.OData и System.Spatial.

Мое решение состояло в том, чтобы удалить перенаправленные переадресации. Вы также должны удалить старую dll, сидящую в папке bin, если процесс сборки не работает.

  • 1
    У меня были не те три (у меня был Microsoft.Data.Services.Client и не System.Spatial), но да УДАЛИТЬ УДАЛИТЬ УДАЛИТЬ
4

Одна вещь, которая иногда, кажется, разрешает эту проблему для членов моей команды, заключается в том, чтобы закрыть все экземпляры Visual Studio, удалить содержимое каталога пакетов, повторно открыть Visual Studio, а затем восстановить пакеты и перестроить. Однако это не всегда работает.

Мы смогли проследить проблему на одной из наших машин, указав проблемный проект, увеличив объем вывода сборки Visual Studio:

Изображение 121742

Затем мы искали выход и идентифицировали целевой проект, который был проблематичным, ища "Microsoft.Data.Edm". Мы заметили, что он, по-видимому, имеет косвенную зависимость от Microsoft.Data.Edm, но мы заметили, что сборка не была явно включена в качестве пакета для этого проекта. Итак, используя консоль пакета Nuget, мы нацелились на проект и выполнили: Install-Package Microsoft.Data.Edm который разрешил проблему.

Изображение 121743

  • 0
    Спасибо, девин. Это сработало для меня!
3

Вот несколько вещей, которые вы можете попробовать:

  • Проверьте событие Post Build, чтобы файл Microsoft.Data.Edm.dll копировался вручную в папку bin.
  • Убедитесь, что другие пакеты не зависят от Microsoft.Data.Edm 5.6.1. Легкий способ сделать это, посмотрев ваши файлы package.config.
  • Если ваш код находится в исходном элементе управления, убедитесь, что в папке bin никто не проверяет. Я удивляюсь тому, как многие люди не знают этого основного правила.
  • Удалите пакеты WindowsAzure.Storage и Microsoft.Data.Edm. Затем установите снова и убедитесь, что вы устанавливаете только стабильную версию.

НТН.

  • 0
    Для меня удаление пакета WindowsAzure.Storage Nuget, а затем повторная установка исправили мою проблему с ошибкой « Could not load file or assembly 'Micorosft.Data.OData' .
2

У меня была такая же проблема на моем сервере сборки и при проверке вывода сборки я заметил следующее:

Копирование файла из "C:\Program Files (x86)\Microsoft WCF Data Службы \5.6\bin.NETFramework\Microsoft.Data.Edm.dll" в "Бин\Microsoft.Data.Edm.dll".

Похоже, что на сервере сборки есть что-то, что не на моей машине, поэтому мне нужно отслеживать это.

2

Сегодня я встретил аналогичный случай, в моей ситуации сборка всегда копирует DLL старой версии в папку для отладки, причина в том, что мой проект напрямую не ссылается на эту DLL, она возвращает другой проект, ссылающийся на эту DLL.
Поэтому, когда вы строите, мой проект находит старую версию от GAC или другого места.
Я решил это, явно указав эту DLL в проекте из нужного места.
вот так:

<Reference Include="Microsoft.Data.Services.Client, Version=5.6.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
  <SpecificVersion>False</SpecificVersion>
  <HintPath>..\packages\Microsoft.Data.Services.Client.5.6.1\lib\net40\Microsoft.Data.Services.Client.dll</HintPath>
</Reference>
1

нашел это !!
внутри вашего файла app.config измените версию bindingredirect.
Сделайте так, чтобы элемент bindingredirect ссылался на версию, на которую жалуется исключение, и исключение исчезнет.
объяснение:
Возможно, файл app.config и эталонная сборка проекта вышли из синхронизации, что привело к ошибке.

<runtime>
		<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
			<dependentAssembly>
				<assemblyIdentity name="Microsoft.Data.Edm" publicKeyToken="31bf3856ad364e35" culture="neutral" />
				<bindingRedirect oldVersion="0.0.0.0-5.6.4.0" newVersion="5.6.4.0" />
			</dependentAssembly>
		</assemblyBinding>
	</runtime>
  • 0
    Круто .. Это решило проблему.
1

Вероятно, это может быть проблема виртуального пути в IIS (я думаю, эта сборка сначала загружается при запуске приложения).

У меня такая же проблема при запуске двух проектов из разных мест на диске, но с теми же виртуальными путями.

Разрешение удаляет этот путь из IIS, процесс reset IIS и снова создает виртуальный путь из VS.

0

1) Превратить подробность сборки в подробный. 2) Найти файл Microsoft.Data.Edm и сравнить версии других сборок, используемых в проекте. 3) Обновить до версии, использованной в других сборках.

Решил мою проблему

0

Это было успешно разрешено для меня закрытием и повторным открытием Visual Studio.

0

Для меня мне пришлось удалить пакет WindowsAzure.MobileServices.Backend.Entity NuGet, который удаляет множество сборок, включая Microsoft.Data.Edm. А потом я просто переустановил его и чудом, он сработает!

Это было в моем проекте Azure Mobile Services WebApi, поэтому ему нужно было работать, и, к счастью, теперь это происходит.

Надеюсь, это поможет.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню