Visual c++ 将SDK与Windows 10 update同步,并将WinRT与标准C++;

Visual c++ 将SDK与Windows 10 update同步,并将WinRT与标准C++;,visual-c++,windows-10,c++-winrt,Visual C++,Windows 10,C++ Winrt,我已经开始使用Visual Studio 2017社区版试验C++/WinRT。我现在有了一个环境,可以在其中构建示例应用程序的调试版本并运行它。我必须: 下载并安装最新的Windows 10 SDK 使用C++/WinRT包和模板更新Visual Studio 2017 将Windows 10操作系统更新至最新版本,版本1803 文档和网页描述了Visual Studio的C++/WinRT软件包更新,尝试编译该示例时出现错误,指示下载并安装最新的Windows 10 SDK 当我尝试实际

我已经开始使用Visual Studio 2017社区版试验C++/WinRT。我现在有了一个环境,可以在其中构建示例应用程序的调试版本并运行它。我必须:

  • 下载并安装最新的Windows 10 SDK
  • 使用C++/WinRT包和模板更新Visual Studio 2017
  • 将Windows 10操作系统更新至最新版本,版本1803
文档和网页描述了Visual Studio的C++/WinRT软件包更新,尝试编译该示例时出现错误,指示下载并安装最新的Windows 10 SDK

当我尝试实际运行示例应用程序的调试版本时,我发现我还需要Windows10Build1803

Windows 10是使用STADARD C++和C++ +WINRT来构建1803应用程序的要求吗?还是我使用调试版本? 这是否意味着尚未将Windows 10安装升级到至少Windows 10 Build 1803的用户将无法运行使用C++/WinRT开发的应用程序

当企业或业务客户使用自己的特定更新集从自己的服务器进行特定于企业的升级时,是否可能选择删除必要的C++/WinRT组件,从而使C++/WinRT应用程序无法在其环境中运行

是否有某种打包方式,以便应用程序中包含必要的C++/WinRT组件

附录:两个测试应用程序

我重新尝试了我使用过的两个测试应用程序。在修改安装最新的Windows 10 SDK 10.0.17134、安装C++/WinRT Visual Studio扩展并将我的电脑更新到Windows 10 1803之后,将重试

我尝试的第一个C++/WinRT应用程序是Kenny Kerr文章中的一个控制台应用程序,它有以下示例应用程序:

#pragma comment(lib, "windowsapp")
#include "winrt/Windows.Foundation.h"
#include "winrt/Windows.Web.Syndication.h"
using namespace winrt;
using namespace Windows::Foundation;
using namespace Windows::Web::Syndication;
int main()
{
  initialize();        // NOTE: Generates compiler error C3861: 'initialize': identifier not found
  Uri uri(L"http://kennykerr.ca/feed");
  SyndicationClient client;
  SyndicationFeed feed = client.RetrieveFeedAsync(uri).get();
  for (SyndicationItem item : feed.Items())
  {
    hstring title = item.Title().Text();
    printf("%ls\n", title.c_str());
  }
}
我最终梳理出了创建、编译和运行此测试源代码的过程,如下所示。从打开Visual Studio 2017社区版开始,我做了以下工作:

  • 文件->新建->项目并使用Windows桌面、Windows控制台应用程序模板
  • 保留
    #包括“stdafx.h”
    ,但用上述源代码替换生成的模板
    main()
  • 右键单击解决方案资源管理器中的解决方案,选择属性,打开C/C++->Language并将“C++语言标准”更改为“ISO C++17标准(/std:C++17)”
“配置属性”->“常规”中的“Windows SDK版本”设置为10.0.17134.0

生成失败,编译错误为
错误C3861:“初始化”:未找到标识符
。进一步的搜索发现了本文,其中包含一个使用
init_plant()的示例应用程序而不是
初始化()因此,通过这一更改,我的示例应用程序编译并运行,生成一个文章列表作为输出

这篇日期为2018年7月5日的Microsoft docs文章有一个控制台示例,使用
init_plant()而不是
初始化()
。该示例也是一个联合提要,但指向不同的URL


第二个测试应用程序使用了C++/WinRT模板“Windows Universal”->“Blank App(C++/WinRT)”,该模板生成了一个编译并运行的示例应用程序。在“属性”->“一般”对话框中,“目标平台版本”设置为“100.17134.0”,“目标平台最小值”设置为“100.1563.0”。C++/WRET投影仅为C++标题。就其本身而言,除了您正在使用的Windows运行时API之外,它们没有特定的运行时需求

真正的问题是您在应用程序中使用了什么API(通过C++/WinRT或使用C++/CX语言扩展(也称为
/ZW
),以及您在构建UWP应用程序时设置了什么值作为
WindowsTargetPlatformMinVersion

通过将
WindowsTargetPlatformVersion
设置为最新的Windows 10 SDK(17134),您可以将UWP应用程序所需的最低操作系统版本设置为17134、16299、15063、14393、10586或10240。您需要在该版本上测试您的应用程序,并确保您保护新API的任何使用

从实际的角度来看,您不需要支持10240,这就是为什么VisualStudio中新项目的默认值为10586。对于消费者版,14393是您在现实世界中可能遇到的最古老的版本


谢谢你的发帖。我将需要审查你写的对样本应用程序,这是在家里的PC上。我记得,虽然我可能弄错了,但我尝试了其他目标并看到了构建错误。今晚我可能需要用实际的示例代码和一些关于特定目标和设置的想法来更新我发布的问题。您必须根据为
WindowsTargetPlatformVersion
设置的相同Windows 10 SDK以及匹配的C++/WinRT头文件进行构建—17134版本现在包含在最新的Windows 10中SDK,因此您不再需要一个独特的包。它应该仍然在旧的操作系统上运行。我更新了我发布的问题,对我正在使用的两个测试应用程序进行了更好的解释。我明白你所说的目标平台版本应该设置为17134,但目标平台最低值可以是其他的。我还没有尝试在尚未升级的Windows 10设备上运行此功能。我想在调查和尝试的过程中,我有点困惑。我从你的评论中读到的是,我要么需要在较旧的操作系统版本上安装Windows SDK 17134,要么升级到Windows build 1803,但我不必两者兼而有之。正确吗?您可以使用Windows 10 SDK(17134)和最新的C++/WinRT投影