Как указать полное имя.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 исправила это.

Другие вопросы по тегам