0

我创建了一个扩展 SDK,它基本上由我使用 C++/CX 编写的 Windows 运行时组件组成。我这样做是为了让我的组件可供使用任何语言(C++、C# 或 JavaScript)构建 Windows 8 应用商店应用程序的开发人员使用。

SDK 在我的本地机器上运行良好。我可以在调试和发布配置中本地构建和运行我的应用程序。但是,当我尝试在远程机器上远程调试我的应用程序时,我注意到我的应用程序在尝试使用我的 SDK 中的组件时失败了。奇怪的是,仅当我的应用程序在调试模式下运行时才会发生此故障。在发布模式下,一切正常。

我究竟做错了什么?

4

1 回答 1

1

使用 Visual Studio 2012

我想我想通了。我在我的 Extension SDK 的 redist 文件夹下的 Debug 和 Retail 文件夹中包含了 C++/CX WinRT 组件的相同二进制文件。

因此,此二进制文件始终依赖于 Visual Studio 2012 的发布 CRT。

现在,当我远程运行我的应用程序的发布版本时,应用程序二进制文件和 SDK 组件二进制文件都依赖于发布 CRT。并且在系统上也可以找到发布 CRT,因为该应用程序依赖于发布 VCLibs 包。所以发布应用程序工作正常。

但是,当我远程运行我的应用程序的调试版本时,该应用程序依赖于 Visual Studio 2012 中的调试 CRT,但 SDK 组件依赖于发布 CRT。由于该应用程序仅依赖于调试 VCLibs 包,因此它仅在运行时找到调试 CRT。因此 SDK 组件无法加载。

解决方案是确保在创建 SDK 时,发布二进制文件依赖于发布 CRT,而调试二进制文件依赖于调试 CRT。

有关 C++ 运行时如何用于 Windows 应用商店应用程序的详细信息,请参阅以下链接:http: //blogs.msdn.com/b/vcblog/archive/2012/09/28/10354327.aspx


更新它现在可以在 Visual Studio 2013 中使用

使用 Visual Studio 2013

在 Visual Studio 2013 中,VCLibs 调试 AppX 包包含调试和发布 CRT DLL。因此,在调试配置中,应用程序依赖于调试 CRT,而扩展 SDK 二进制文件依赖于发布 CRT。这两个 DLL 都可以在 VCLibs Debug AppX 包中找到。所以它有效。

于 2012-12-21T00:52:42.867 回答