0

我在我的 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。

4

1 回答 1

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修复了它。

于 2012-09-04T13:29:22.383 回答