2

我正在尝试在我的项目程序集中引入强签名。

我的项目输出保存在 XML 中,并且提到了一个类型(在签名之前):

typestr="XYZ.PQR, MyWidget, Version=1.0.2406.20198, Culture=neutral, PublicKeyToken=null"

在所有程序集都使用带有令牌的公钥 622edca63ee1770c 进行签名之后。我在 app.config 文件中引入了 <assemblyBinding> 块,如下所示:

 <assemblyBinding>
  <dependentAssembly>
    <assemblyIdentity name="MyWidget" publicKeyToken="622edca63ee1770c" culture="neutral"/>
    <bindingRedirect oldVersion="1.0.2406.20198" newVersion="0.1.27.10695"/>
  </dependentAssembly>
 </assemblyBinding>

我仍然收到错误:

无法加载文件或程序集“EPGWidget,版本=1.0.2406.20198,Culture=neutral,PublicKeyToken=622edca63ee1770c”或其依赖项之一。找到的程序集的清单定义与程序集引用不匹配。(来自 HRESULT 的异常:0x80131040)

当一个代码片段像:

Type type = Type.GetType(typestr);

以下被执行。但是,它适用于:

typestr="XYZ.PQR, MyWidget"
4

1 回答 1

2

如果是序列化为xml,为什么里面有类型信息?xml 的目标之一是从序列化中删除类型元数据。这是一个数组还是什么?可能有更好的方法来序列化这些数据。

AFAIK,程序集重定向不适用于基于字符串的反射;如果限定名称不匹配,则不匹配。最后一个示例没有指定签名详细信息,这允许它接受任何内容。

就个人而言,我会尝试解决在 xml 中包含类型信息的问题——这可能是一场更容易、更合适的战斗。

于 2009-04-28T07:56:53.360 回答