2013-07-25 18 views
6

Zbudowałem komponent WinRT (.winmd) do użytku w aplikacjach Windows Store i XAML. Po tym przedstawieniu i luźny .winmd wyjście plików w kliencie JavaScript, widzę ten build ostrzeżenie:Jak spakować składnik środowiska wykonawczego systemu Windows do dystrybucji?

Microsoft.AppXPackage.Targets (808,9): APPX1707 Ostrzeżenie: Brak pliku realizacja została przewidziana pliku .winmd "myRuntimeComponent.winmd". Aby wygenerować informacje rejestracyjne w manifeście aplikacji, określ metadane "Implementacja" na elemencie referencyjnym .winmd w pliku projektu.

Nie mogę znaleźć żadnej dokumentacji dotyczącej tego błędu lub sposobu uwzględnienia metadanych implementacji.

Po uruchomieniu klienta JavaScript, to jest wyjątek, gdy metoda klasy eksportowane z .winmd nazywa się:

0x80040154 - JavaScript Runtime Error: Klasa niezarejestrowana

Zauważ, że jestem odwołującego luźny plik .winmd w projekcie aplikacji klienckiej, zamiast odwoływania się do projektu Visual Studio, który buduje plik .winmd. Moim przypadkiem użycia jest dystrybucja danych wyjściowych .winmd, a nie pełne źródło dla komponentu .winmd - dystrybucja źródeł nie jest opcją.

Należy również pamiętać, że gdy komponent środowiska wykonawczego systemu Windows ma odniesienie jako odniesienie do projektu, klient JavaScript jest kompilowany i działa poprawnie. Klient C# XAML działa poprawnie z odniesieniem do projektu lub odniesieniem do luźnego .winmd.

Wygląda na to, że niektóre informacje rejestracyjne nie są generowane w kompilacji aplikacji klienta po odwołaniu luźnego pliku .winmd.

Jak mogę zbudować i rozpowszechnić luźny składnik środowiska wykonawczego systemu Windows do użytku zarówno przez JavaScript, jak i klientów zarządzanych?

+0

trzeba z komponentu zbyt .dll. Gdy komponent zostanie skompilowany, musi wygenerować plik .winmd i plik .dll. – kiewic

+0

Niestety tak nie jest - nie wygenerowano dll. Pliki wyjściowe obejmują .winmd, .pri i .pdb. –

+0

Hej Jesse, czy kiedykolwiek znalazłeś rozwiązanie swojego problemu? –

Odpowiedz

5

Komponent WinRT zbudowany przy użyciu języka C# lub VB generuje plik .winmd zawierający zarówno metadane, jak i implementację. Komponent zbudowany w C++ zapewnia oddzielne pliki .winmd i .dll, a biblioteka DLL zawiera szczegóły dotyczące rejestracji komponentu.

Podobno jako ostrzeżenie wskazuje, trzeba edytować plik projektu z czymś następujące zwrócić do biblioteki DLL:

<Reference Include="component"> 
    <HintPath>component.winmd</HintPath> 
    <IsWinMDFile>true</IsWinMDFile> 
    <Implementation>component.dll</Implementation> 
</Reference> 
+0

To działało jak czar! Dziękuję Ci! – Zak

1

Alternatywnie można zajrzeć do rozszerzeń SDK. Patrz poniższy link jak spakować komponentu jako łatwe do spożywania Extension SDK VS:

http://msdn.microsoft.com/en-us/library/jj127119.aspx

+0

To wydaje się być jedynym rozwiązaniem do pakietu środowiska wykonawczego Windows, który składa się z biblioteki C++/CX dla wielu architektur. W przeciwnym razie program Visual Studio będzie się opierał na kopiowaniu biblioteki DLL na urządzenie mobilne, zignorowaniu go lub niepoprawnym użyciu. – Mike