2013-08-02 12 views
1

У меня есть приложение, которое использует ссылочную библиотеку. Эта библиотека, в свою очередь, ссылается на библиотеку .winmd.Runtime пытается искать exe/dll вместо ссылки .winmd

Глядя на IL ссылочной библиотеки, я могу seee этой ссылки:

.assembly extern windowsruntime FlurryWin8SDK 
{ 
    .ver 0:9:0:0 
} 

Во время выполнения, однако, я получаю исключение:

{"Could not load file or assembly 'FlurryWin8SDK' or one of its dependencies. The system cannot find the file specified.":"FlurryWin8SDK"} 

Кроме того, с помощью ProcMon я вижу, что там являются попытки поиска FlurryWin8SDK.exe и FlurryWin8SDK.dll, но не для файла с расширением .winmd.

Кроме того, это выход из Fusion LogViewer:

BEGIN : Framework bind. 
END : The provided identity format is not recognized. (Exception from HRESULT: 0x80132003) 
BEGIN : Windows Runtime Type bind. 
END : The provided identity format is not recognized. (Exception from HRESULT: 0x80132003) 
BEGIN : Immersive bind. 
END : The system cannot find the file specified. (Exception from HRESULT: 0x80070002) 

Что может быть причиной такого странного поведения?

+0

Вы нашли решение? У меня очень похожая проблема в WP 8.1 с моим собственным компонентом WinMD. – Soonts

ответ

2

Это не странное поведение. WinRT поставил жесткую остановку в DLL Hell, такую ​​проблему вы не можете ожидать от пользователя магазина, чтобы устранить неполадки. Очень сложным требованием является то, что все зависимости включены в пакет приложения. И Windows будет только смотреть в этом пакете для DLL.

Это делает использование файла .winmd немного менее полезным. Вы рассматриваете это только в большом продукте, который построен из множества отдельных решений, которые поставляются отдельно.

+0

Я забыл упомянуть, но .winmd включен в пакет ... –

+0

Файл .winmd не содержит никакого кода, просто объявления. Ваша программа падает, когда она пытается найти код. –

+1

Flurry помещает свой код в файл .winmd ... Я вижу фактический код в Reflector. –

2

Управляемые типы WinRT могут иногда иметь код, встроенный в файл winmd. Однако, если сборка .net содержит любые общедоступные типы, которые не являются типами WinRT, они будут в сборке .Net с расширением .Dll. Возможно, ваш компонент содержит код в DLL, а также файл winmd.