Приложение все еще ссылается на предыдущую версию сборки - PullRequest
4 голосов
/ 22 марта 2012

У меня небольшие проблемы с GAC / моим приложением. Ранее я использовал Версия 9.0.2.3951 для ссылки на сборку iAnywhere.Data.AsaClient, но теперь я удалил ее, перейдя в C: \ Windows \ Assembly. В настоящее время в GAC есть версия 9.0.2.3924, но когда я запускаю приложение, оно все еще ищет версию 9.0.2.3951 вместо 3924.

Я попытался зайти в файл Assembly.cs в своем проекте, чтобы увидеть, есть ли в нем какая-либо запись для 3951, но в нем даже не упоминается, затем я попытался зайти в файл App.Config, чтобы увидеть, есть ли в нем какая-либо запись, но это не так. Я также удалил ссылки из проекта и повторно добавил ссылку на версию файла 3924.

Как я могу заставить мое приложение искать 3924 вместо 3951 версии файла.

App still referencing newer version although there is no references

Ответы [ 4 ]

3 голосов
/ 23 марта 2012

Вам необходимо добавить assemblyBinding информацию в вашу конфигурацию, чтобы принудительно настроить привязку. Как то так:

<runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
        <probing privatePath="" />
        <dependentAssembly>
            <assemblyIdentity name="iAnywhere.Data.AsaClient" publicKeyToken="f222fc4333e0d400" culture="neutral" />
            <bindingRedirect oldVersion="9.0.2.3951-9.0.2.3951" newVersion="9.0.2.3924" />
        </dependentAssembly>
    </assemblyBinding>
</runtime>

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

<Reference Include="iAnywhere.Data.AsaClient, Version=9.0.2.3951, Culture=neutral, PublicKeyToken=f222fc4333e0d400">

Вы можете либо удалить его и восстановить его вручную, либо просто изменить запись XML на:

<Reference Include="iAnywhere.Data.AsaClient, Version=9.0.2.3924, Culture=neutral, PublicKeyToken=f222fc4333e0d400">

Ура!

2 голосов
/ 24 марта 2012

code4life дал хорошее решение, которое работало бы в большинстве случаев. Однако в моем случае другое решение работало для меня. Просто чтобы помочь всем остальным, я добавляю это решение здесь со скриншотами.

  1. В VS2010 нажмите Инструменты , затем нажмите опции , затем Проект и решения , а затем нажмите Построить и запустить и затем в Детализация выходных данных сборки проекта MSBuild: выберите Диагностика

  2. Под Детализация файла журнала сборки проекта MSBuild: выберите Диагностика и нажмите OK

Options Screen

"3". Нажмите F5 , чтобы снова запустить проект. На этот раз посмотрите на окно OUTPUT , чтобы найти раздел Calling Assembly . В моем случае это показало мне следующее.

enter image description here Выделенный текст на изображении выше показывает, что в GAC все еще существует файл политики, перенаправляющий вызов 3924 версии из моего приложения на 3951 . Посмотрев на это, я вошел в C: \ Windows \ Assembly ** и начал искать файл политики, который вызывает перенаправление, чтобы ** удалить it. Снимок экрана выглядит следующим образом, enter image description here

"4". Я просто щелкнул правой кнопкой мыши по файлу и удалил версию, которая мне не нужна, и снова запустил свою программу, и она исправлена.

0 голосов
/ 23 марта 2012

Проблема в том, что ваше приложение было скомпилировано с версией сборки, которую оно больше не может найти. Ваши варианты:

  1. Обновите ссылку на сборку и перекомпилируйте код
  2. Создать редирект связывания, как @ code4life упоминает в своем ответе
0 голосов
/ 23 марта 2012

Найдите все ваши dll's iAnywhere.Data.AsaClient и выясните, где находятся dll, где храните

  open cmd.exe

  cd\

  dir iAnywhere.Data.AsaClient.dll /s

Проверьте все dll для версии, которую вы ищете, и удалите все остальные из приложения, найдя эти dll's

если вы обнаружите, что dll является неправильной версией в gac, удалите ее из gac, если вам нужна помощь, зная, как это сделать, дайте мне знать, и я скажу вам

...