如何在oracle coherence POF配置中指定完整的.net类型名称?

时间:2012-09-04 10:34:52

标签: c# gac oracle-coherence

我在我的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中,我发现:

  

您无需在类名中指定完全限定的类型名称   元件。类型和程序集名称就足够了。

但是,如果我想指定完全限定的名称呢?

- 编辑

我遇到的新问题是 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,版本= 1.2.3.4,   publicKeyToken = 0f73b23f05811dc2,culture = neutral“   
  MyAssembly.IdentityTransformer,   MyAssembly,版本= 1.2.3.4,   publicKeyToken = 0f73b23f05811dc2,culture = neutral   

装配绑定日志查看器中的

  

警告:为程序集提供了部分绑定信息:WRN:   程序集名称:MyAssembly,Version = 1.2.3.4 |域名ID:1

     

调用程序集:Coherence,Version = 3.7.1.3,Culture = neutral,PublicKeyToken = 0ada89708fdf1f9a。

1 个答案:

答案 0 :(得分:0)

我通过分析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 修复了它。