SpecificVersion - это атрибут, который применяется только во время сборки. Он был разработан, чтобы помочь, если в среде сборки существует несколько версий сборки; когда SpecificVersion имеет значение true, он гарантирует, что вы соберете нужную версию и получите ссылку на нее. Однако после сборки целевой сборки ее ссылки содержат строгое имя и номер версии указанной сборки. Поэтому, если SpecificVersion имеет значение false, он будет установлен для ссылки на любую доступную версию ссылки в среде сборки на тот момент.
«Обратите внимание, что свойство« Конкретная версия »является только директивой времени сборки и не влияет на разрешение версии во время выполнения указанной сборки» (http://www.code -magazine.com / article.aspx? Quickid = 0507041 & page = 3).
Однако вы можете использовать перенаправление версий, чтобы явно указать, что вы принимаете любую версию. Поле oldVersion указывает на что угодно (версия, на которой вы построили), а атрибут newVersion будет указывать, с какой из них вы хотите связать, во время выполнения.
<dependentAssembly>
<assemblyIdentity name="Oracle.DataAccess" publicKeyToken="89B483F429C47342"/>
<bindingRedirect oldVersion="1.0.0.0-2.111.9999.9999" newVersion="2.102.2.20"/>
</dependentAssembly>
(см. http://msdn.microsoft.com/en-us/library/7wd6ex19.aspx.)
Этот узел зависимого узла может быть применен к различным контекстам. Один возможный контекст может быть в файле web.config или app.config как дочерний узел узла конфигурации / времени выполнения / assemblyBinding.
Чтобы ответить на ваш конкретный сценарий поддержки Oracle 10g и 11g? Есть два варианта, первый из которых был предложен пользователем @BQ:
- Развертывание только одной версии ODP.NET. Вы должны иметь возможность общаться с обеими версиями сервера базы данных (10g и 11g) из любой версии ODP.NET (10g или 11g). Смотрите ответ @ BQ ниже.
- Если вам действительно нужно связать две разные версии сборки, вам понадобятся две разные конфигурации перенаправления версий. Другими словами, вам понадобятся два файла app.config, один из которых содержит перенаправление версии на версию 10g ODP.NET, а другой - на версию 11g ODP.NET.
Еще несколько советов:
- Убедитесь, что вы удалили все предоставленные Oracle политики издателя из GAC. Они имеют приоритет над файлами в web / app.config
- По умолчанию ошибки привязки кэшируются, поэтому если сборке ODP.NET не удалось выполнить привязку с перенаправлением версии, вам потребуется перезапустить IIS для очистки кэшированных ошибок.