我在我的 C# 项目中使用 oracle coherence。.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#BABJCBDD我发现:
您无需在 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=neutral”
MyAssembly.IdentityTransformer,MyAssembly,Version=1.2.3.4,publicKeyToken=0f73b23f05811dc2,culture=neutral
在程序集绑定日志查看器中:
警告:为程序集提供了部分绑定信息:警告:程序集名称:MyAssembly,版本=1.2.3.4 | 域 ID:1
调用程序集:一致性,版本=3.7.1.3,文化=中性,PublicKeyToken=0ada89708fdf1f9a。