2013-07-25 89 views
6

我已經構建了一個WinRT組件(.winmd)供JavaScript和XAML Windows Store應用程序使用。當在JavaScript客戶端中包含並引用鬆散的.winmd文件輸出時,我看到此構建警告:如何打包Windows運行時組件以進行分發?

Microsoft.AppXPackage.Targets(808,9):警告APPX1707:沒有爲.winmd文件提供實現文件'myRuntimeComponent.winmd'。要在應用清單中生成註冊信息,請在項目文件的.winmd引用項目中指定'Implementation'元數據。

我找不到有關此錯誤的任何文檔或如何包含實現元數據。

當運行JavaScript客戶端,這個異常被拋出時,從.winmd出口類方法被稱爲:

0x80040154的 - 的JavaScript運行時錯誤:沒有註冊類

請注意,我引用客戶端應用程序項目中的鬆散.winmd文件,而不是引用構建.winmd的Visual Studio項目。我的用例是發佈.winmd輸出,而不是.winmd組件的完整源代碼 - 源代碼發佈不是一個選項。

另請注意,當Windows運行時組件被引用爲作爲項目引用時,JavaScript客戶端將生成並正確運行。 C#XAML客戶端可以正確運行,無論是項目引用還是對鬆散.winmd的引用。

當引用鬆散的.winmd時,似乎在客戶端應用程序構建中沒有生成某些註冊信息。

如何構建和分發一個鬆散的Windows運行時組件以供JavaScript和受管客戶端使用?

+0

您需要的.dll文件從組件了。編譯組件時,它必須生成一個.winmd文件和一個.dll文件。 – kiewic

+0

不幸的是,並非如此 - 沒有生成DLL。輸出文件包括.winmd,.pri和.pdb。 –

+0

嘿傑西,你有沒有找到解決你的問題? –

回答

5

用C#或VB構建的WinRT組件生成一個包含元數據和實現的.winmd。用C++構建的組件提供單獨的.winmd和.dll文件,並且該DLL包含註冊組件的詳細信息。

顯然,作爲警告表明,你需要的東西,如下面的指向DLL編輯的項目文件:

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

這工作就像一個魅力!謝謝! – Zak

1

或者你可能想看看擴展的SDK。請參見下面的鏈接,如何包裝你的組件作爲易耗擴展SDK在VS:

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

+0

這似乎是打包由多個體繫結構的C++/CX庫組成的Windows運行時組件的唯一解決方案。否則Visual Studio將不願意將DLL複製到移動設備,忽略它,或者無法正確使用它。 – Mike

相關問題