PostSharp 2.0包含CLR主机并实现IHostAssemblyStore::ProvideAssembly。

从托管代码中,我调用:

Assembly.Load("logicnp.cryptolicensing, Version=3.0.0.0, Culture=neutral,
               PublicKeyToken=4a3c0a4c668b48b4")

我的IHostAssemblyStore::ProvideAssembly实现收到了第一个参数pBindInfo的以下输入:
0x002cd578 {
dwAppDomainId=1
lpReferencedIdentity=0x03c123f8 "logicnp.cryptolicensing, version=3.0.0.0,
                             culture=neutral, publickeytoken=4a3c0a4c668b48b4"
lpPostPolicyIdentity=0x03c14620 "logicnp.cryptolicensing, version=3.0.0.0,
    culture=neutral, publickeytoken=4a3c0a4c668b48b4, processorarchitecture=x86"
}

然后,我的实现返回正确的流。请注意,该文件的绑定(bind)身份为“logicnp.cryptolicensing,版本= 3.0.0.0,区域性=中性,publickeytoken = 4a3c0a4c668b48b4”。

当我从ProvideAssembly返回此文件时,CLR引发以下异常:
Could not load file or assembly 'logicnp.cryptolicensing, Version=3.0.0.0,
Culture=neutral, PublicKeyToken=4a3c0a4c668b48b4' or one of its dependencies.
The located assembly's manifest definition does not match the assembly
reference.  (Exception from HRESULT: 0x80131040)

因此,我返回的程序集与策略后引用不匹配,这是正确的,但是此策略后引用不正确。

我想知道是否有解决此问题的方法,或者我误会了什么。

这对我来说是一个重要问题,我的支持论坛上有很多用户在抱怨。

PS。配置:CLR 2.0 x86或x64(已安装最新更新),Windows 7 x64。

我还将这个问题发布在MSDN论坛http://social.msdn.microsoft.com/Forums/en/clr/thread/93efa20f-5423-4d55-aa3d-dadcc462d999上。

最佳答案

这个问题已经在http://social.msdn.microsoft.com/Forums/en/clr/thread/93efa20f-5423-4d55-aa3d-dadcc462d999上得到了回答。

基本上,这是一个文档错误:

主机实现应返回COR_E_FILENOTFOUND(在corerror.h中定义),而不是从IHostAssemblyStore::ProvideAssembly返回ERROR_FILE_NOT_FOUND(如文档中所指定)。

关于c# - IHostAssemblyStore::ProvideAssembly导致异常 “The located assembly'的 list 定义与程序集引用不匹配”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2363284/

10-13 08:34