Nie można załadować składnika WinRT, chyba że odwołam się do projektu

Wpadam na dziwny problem. Stworzyłem komponent Windows Runtime Component (dla Sklepu Windows), który udostępnia niektóre starsze kody C / C ++ dla .NET za pośrednictwem niektórych klas opakowujących C #.

Napisałem testową aplikację Store App (zwaną dalej „test1”), która odwołuje się do WRCprojekt (oba projekty w tym samym rozwiązaniu). Wzywa do komponentu i wszystko działa poprawnie.

Następnie biorę następujące pliki wyjściowe z projektu WRC:

MyWrtComponent.dll
MyWrtComponent.exp
MyWrtComponent.pdb
MyWrtComponent.pri
MyWrtComponent.winmd

... i spróbuj użyć ich z innego projektu aplikacji Store („test2”). W tym projekcie zamiast odwoływać się do projektu MyWrtComponent, dodaję odwołanie do pliku .winmd. Wszystko buduje się dobrze, ale kiedy uruchamiam aplikację test2, otrzymuję wyjątek System.IO.FileNotFound od mscorlib, gdy tylko spróbuję użyć jednej z klas C # zaimplementowanych w MyWrtComponent:

at System.StubHelpers.StubHelpers.GetWinRTFactoryObject(IntPtr pCPCMD)
at MyWrtComponent.MyWrtClass..ctor()

The specified module could not be found.
(Exception from HRESULT: 0x8007007E)

Użycie wydania vs kompilacja debugowania MyWrtComponent nie ma znaczenia.

Uruchamianie ProcMon na test2, widzę kilka nieudanych prób załadowania vccorlib120_app.DLL (lub vccorlib120d_app.DLL, jeśli buduję debugowanie):

QueryOpen   F:\test2\bin\Debug\AppX\vccorlib120d_app.DLL    NAME NOT FOUND
QueryOpen   F:\test2\bin\Debug\AppX\vccorlib120d_app.DLL    NAME NOT FOUND
CreateFile  C:\Windows\SysWOW64\vccorlib120d_app.DLL    NAME NOT FOUND

Potwierdziłem, że ten plik nie istnieje w moim folderze C: Windows SysWOW64. Nie wiem, czy to ma znaczenie dla mojego problemu.

Po uruchomieniu testu1 wyszukiwane są różne lokalizacje, a plik zostaje znaleziony:

QueryOpen   F:\test1\bin\Debug\AppX\vccorlib120d_app.DLL    NAME NOT FOUND
CreateFile  C:\Program Files\WindowsApps\Microsoft.VCLibs.120.00.Debug_12.0.20827.3_x86__8wekyb3d8bbwe\vccorlib120d_app.dll SUCCESS

Porównałem bin Debug AppMaxifest.xml obu projektów testowych i zauważyłem jedną ważną różnicę; test1 ma następujące i test2 nie:

<Dependencies>
  <PackageDependency Name="Microsoft.VCLibs.120.00.Debug" MinVersion="12.0.20827.3" />
</Dependencies>

Jeśli dodaję te trzy linie do wygenerowanego wyjścia test2 i uruchomię aplikację, działa, ale oczywiście to nie jest prawdziwa poprawka.

Czy ktoś rozumie, co tu się dzieje? Czy MyWrtComponent ma zależność, która w jakiś sposób nie jest przekazywana, czy mam coś zrobić, aby spakować vccorlib120d_app.DLL wraz z moim komponentem środowiska wykonawczego, czy ...?

Z góry dziękuję.

questionAnswers(2)

yourAnswerToTheQuestion