Как указать полное имя.net типа в конфигурации POF oracle coherence?
Я использую согласованность оракула в моем проекте C#. В проекте.Net есть ссылки на Coherence, и он устанавливает некоторые свойства Coherence, "вводя" мои типы. Один из примеров конфигурации POF:
<user-type>
<type-id>1008</type-id>
<class-name>MyTypeName, MyAssembly, version=1.2.3.4, publicKeyToken=0f73b23f05811dc2</class-name>
</user-type>
Даже если все мои типы указаны с использованием полного имени с версией и маркером открытого ключа, Coherence не использует его и привязывается к MyAssembly.
Это большая проблема для меня, потому что MyAssembly находится в GAC и сбой привязки. Конечно, я могу использовать конфигурацию приложения и установить:
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<qualifyAssembly partialName="MyAssembly" fullName="MyAssembly,Version=1.2.3.4,publicKeyToken=0f73b23f05811dc2,culture=neutral" />
</assemblyBinding>
Но я бы хотел этого избежать (не каждое приложение может иметь app.config - например, PowerShell).
В документации Oracle http://docs.oracle.com/cd/E18686_01/coh.37/e18678/net_intobjects.htm я обнаружил, что:
Вам не нужно указывать полное имя типа в элементе class-name. Тип и название сборки достаточно.
Но что, если я хочу указать полное имя?
--Редактировать
У меня возникла проблема с tangosol-coherence.override.xml:
<security-config>
<identity-transformer>
<class-name>MyAssembly.IdentityTransformer, MyAssembly, Version=1.2.3.4, publicKeyToken=0f73b23f05811dc2, culture=neutral</class-name>
</identity-transformer>
<principal-scope>false</principal-scope>
</security-config>
Исключение я получаю:
Не удалось создать экземпляр класса "MyAssembly.IdentityTransformer, MyAssembly, Version=1.2.3.4, publicKeyToken=0f73b23f05811dc2, culture= нейтральный"
MyAssembly.IdentityTransformer, MyAssembly, версия = 1.2.3.4, publicKeyToken = 0f73b23f05811dc2, культура = нейтральная
в средстве просмотра журнала привязки сборки:
WRN: Для сборки была предоставлена информация о частичной привязке: WRN: Имя сборки: MyAssembly, Version=1.2.3.4 | Идентификатор домена: 1
Вызов сборки: согласованность, версия =3.7.1.3, культура = нейтральная, PublicKeyToken=0ada89708fdf1f9a.
1 ответ
Я решил эту проблему, проанализировав Coherence в разобранном виде dll.
Это выглядит как:
Tangosol.Util.TypeResolver.Resolve(typeName);
не может разрешить тип, когда он указан следующим образом:
MyAssembly.IdentityTransformer, MyAssembly, Version=1.2.3.4, publicKeyToken=0f73b23f05811dc2, culture=neutral
но может, когда указано так:
MyAssembly.IdentityTransformer, MyAssembly, Version=1.2.3.4, Culture=neutral, PublicKeyToken=0f73b23f05811dc2
Модификация tangosol-coherence.override.xml исправила это.