IHostAssemblyStore::ProvideAssembly вызывает исключение. Определение манифеста обнаруженной сборки не соответствует ссылке на сборку.

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"
}

Затем моя реализация возвращает правильный поток. Обратите внимание, что идентификатор привязки этого файла — «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.


person Gael Fraiteur    schedule 02.03.2010    source источник


Ответы (1)


Ответ на вопрос был дан на http://social.msdn.microsoft.com/Forums/en/clr/thread/93efa20f-5423-4d55-aa3d-dadcc462d999.

По сути, это ошибка документации:

Вместо возврата ERROR_FILE_NOT_FOUND из IHostAssemblyStore::ProvideAssembly (как указано в документации) реализация хоста должна возвращать COR_E_FILENOTFOUND (определено в corerror.h).

person Gael Fraiteur    schedule 25.03.2010