Ошибка связывания в .net 4

#protobuf-net

#protobuf-net

Вопрос:

Я пытаюсь запустить protobuf-net v2 из моего проекта .net 4.

Я взял dll из каталога .net3 и вставил в свой проект, но теперь я получаю:

Не удалось загрузить файл или сборку ‘protobuf-net, Version = 2.0.0.450, Culture = neutral, PublicKeyToken = 257b51d87d2e4d67’ или одну из его зависимостей. Определение манифеста найденной сборки не соответствует ссылке на сборку. (Исключение из HRESULT: 0x80131040)

Я попытался добавить это в свой web.config:

   <runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
  <dependentAssembly>
    <assemblyIdentity name="protobuf-net" publicKeyToken="257b51d87d2e4d67" culture="neutral" />
    <bindingRedirect oldVersion="2.0.0.450" newVersion="4.0.0.0" />
  </dependentAssembly>
</assemblyBinding>
  

но не получается. Какие-нибудь советы?

Комментарии:

1. В нем говорится: если что-то запрашивает 2.0.0.450, вместо этого укажите 4.0.0.0, что совсем не то, что вы хотите. Не могли бы вы уточнить, какой сценарий здесь, пожалуйста? Рад помочь (я автор), но мне неясно…

Ответ №1:

В большинстве случаев здесь вообще не должно быть необходимости в привязке к сборке. Если вы получаете ошибки, связанные с тем, что он не находит предыдущую версию, вы можете добавить привязку с 1.0.0.278 по 2.0.0.450 (например; используйте фактические номера версий).

Привязка к 4.0.0.0 неверна; вы уже используете правильную сборку. Единственное различие между DLL 2.0 и dll 3.0 — это некоторые API, связанные с WCF, в общедоступном интерфейсе. Не существует конкретной библиотеки DLL 4.0 просто потому, что 4.0 не вводит никаких новых функций API, которые влияют на эту библиотеку. Следовательно, dll из папки net30 абсолютно подходит для .net 4.0.

Если вы используете пакет nuget (начиная с r452), он автоматически выберет подходящие библиотеки DLL для вашего проекта.

Комментарии:

1. Большое вам спасибо за ваш ответ. Все, что я хочу, это иметь возможность использовать dll. Я не могу найти r452, я вижу только r450 на странице проекта. Я давно не делал .net, но я считаю, что правильно связал dll, и все intellisense работало так, как должно. Но при запуске проекта я получаю: не удалось загрузить файл или сборку ‘protobuf-net, Version = 2.0.0.450, Culture = neutral, PublicKeyToken = 257b51d87d2e4d67’ или одну из его зависимостей. Определение манифеста найденной сборки не соответствует ссылке на сборку. (Исключение из HRESULT: 0x80131040) Любые советы о том, на что обратить внимание?

2. Похоже, мне удалось назвать мой тестовый проект protobuf-net, столкновение сборки. Упс 😉

3. @Rickard значит, все разобрано? Кстати, для r452 смотрите Пакет nugget. Изменение между r450 и r452 минимально (событие для крайнего сценария)