none
Windows 10 UWP应用C++应用调用C#运行时组件无法通过Windows 应用认证工具包的测试,有人知道原因吗? RRS feed

  • 问题

  • 失败

    支持的 API
    •发现错误: 支持的 API 测试检测到以下错误:◦此应用程序类型不支持 api-ms-win-core-com-l1-1-1.dll 中的 API CoCreateInstance。
    xxxxxxxxx.dll 调用此 API。

    •未修复时会产生影响:  使用不在用于 Windows 应用商店应用的 Windows SDK 中的 API 与 Windows 应用商店认证要求冲突。

    •如何修复:  查看错误消息以识别不在用于 Windows 应用商店应用的 Windows SDK 中的 API。请注意,在调试配置中生成的 C++ 应用不
    会通过此测试,即使它仅使用来自用于 Windows 应用商店应用的 Windows SDK 的 API。 有关详细信息,请参阅下面的链接:
     Windows 应用商店应用中 Windows API 的替代选择。

    微软是禁止C++应用调用C#的运行时组件库吗?还是需要什么特殊设置的?

    2015年11月12日 11:11

答案

  • 可以参考如下链接 https://social.msdn.microsoft.com/Forums/en-US/ce4d57d3-1e37-4532-a360-dc10dec6b454/rtm-known-issue-supported-api-test-in-wack-fails-to-certify-a-c-uwp-which-references-a-c-uwp?forum=Win10SDKToolsIssues

    其中方法如下

    To workaround this issue, please use the below steps:

    1.) Close your existing solution from Visual Studio (especially the C++ UWP Project)

    2.) Open the .vcxproj file in your favorite text editor

    3.) Locate the Release section for each platform you are trying to build (x86, x64 and/or ARM)

    4.) Add the following section:

    <Optimize>true</Optimize>

    5.) Save and close the .vcxproj file.

    6.) Open the Solution in Visual Studio again, create APPX package for the platform you are interested in and run WACK against the Release configuration you added the above section for.

    7.) This should solve the problem.

    As an example, here's how the section looks like for all the Build configurations (notice <Optimize> under each Build platform).

      ...
      ...<other section of the project>
    
      <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
        <ConfigurationType>Application</ConfigurationType>
        <UseDebugLibraries>false</UseDebugLibraries>
        <WholeProgramOptimization>true</WholeProgramOptimization>
        <PlatformToolset>v140</PlatformToolset>
        <UseDotNetNativeToolchain>true</UseDotNetNativeToolchain>
        <Optimize>true</Optimize>
      </PropertyGroup>
      <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM'" Label="Configuration">
        <ConfigurationType>Application</ConfigurationType>
        <UseDebugLibraries>false</UseDebugLibraries>
        <WholeProgramOptimization>true</WholeProgramOptimization>
        <PlatformToolset>v140</PlatformToolset>
        <UseDotNetNativeToolchain>true</UseDotNetNativeToolchain>
        <Optimize>true</Optimize>
      </PropertyGroup>
      <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
        <ConfigurationType>Application</ConfigurationType>
        <UseDebugLibraries>false</UseDebugLibraries>
        <WholeProgramOptimization>true</WholeProgramOptimization>
        <PlatformToolset>v140</PlatformToolset>
        <UseDotNetNativeToolchain>true</UseDotNetNativeToolchain>
        <Optimize>true</Optimize>
      </PropertyGroup>
    
      ...
      ...<other section of the project>


    Windows Store Developer Solutions, follow us on Twitter: @WSDevSol|| Want more solutions? See our blog

    2015年12月22日 3:42
    版主

全部回复

  • 这是API级别的问题,和语言没关系。

    你的C#组件库为什么会有到CoCreateInstance的调用?这个API是桌面API分区的,在商店应用中无法使用。



    Visual C++ MVP

    2015年11月12日 17:00
  • 我把简单的demo工程放上来了,可以正常运行,用C#项目调用ok,用C++项目调用通不过认证测试。

    http://yun.baidu.com/share/link?shareid=2127835543&uk=1535532634

    我怀疑是不是C++的项目调用的C#运行时组件编译后会使用CoCreateInstance来进行调用的。

    2015年11月13日 2:43
  • .Net Native 编译器有个类似的bug,已报告给项目组。


    Visual C++ MVP

    2015年11月26日 17:09
  • 可以参考如下链接 https://social.msdn.microsoft.com/Forums/en-US/ce4d57d3-1e37-4532-a360-dc10dec6b454/rtm-known-issue-supported-api-test-in-wack-fails-to-certify-a-c-uwp-which-references-a-c-uwp?forum=Win10SDKToolsIssues

    其中方法如下

    To workaround this issue, please use the below steps:

    1.) Close your existing solution from Visual Studio (especially the C++ UWP Project)

    2.) Open the .vcxproj file in your favorite text editor

    3.) Locate the Release section for each platform you are trying to build (x86, x64 and/or ARM)

    4.) Add the following section:

    <Optimize>true</Optimize>

    5.) Save and close the .vcxproj file.

    6.) Open the Solution in Visual Studio again, create APPX package for the platform you are interested in and run WACK against the Release configuration you added the above section for.

    7.) This should solve the problem.

    As an example, here's how the section looks like for all the Build configurations (notice <Optimize> under each Build platform).

      ...
      ...<other section of the project>
    
      <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
        <ConfigurationType>Application</ConfigurationType>
        <UseDebugLibraries>false</UseDebugLibraries>
        <WholeProgramOptimization>true</WholeProgramOptimization>
        <PlatformToolset>v140</PlatformToolset>
        <UseDotNetNativeToolchain>true</UseDotNetNativeToolchain>
        <Optimize>true</Optimize>
      </PropertyGroup>
      <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM'" Label="Configuration">
        <ConfigurationType>Application</ConfigurationType>
        <UseDebugLibraries>false</UseDebugLibraries>
        <WholeProgramOptimization>true</WholeProgramOptimization>
        <PlatformToolset>v140</PlatformToolset>
        <UseDotNetNativeToolchain>true</UseDotNetNativeToolchain>
        <Optimize>true</Optimize>
      </PropertyGroup>
      <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
        <ConfigurationType>Application</ConfigurationType>
        <UseDebugLibraries>false</UseDebugLibraries>
        <WholeProgramOptimization>true</WholeProgramOptimization>
        <PlatformToolset>v140</PlatformToolset>
        <UseDotNetNativeToolchain>true</UseDotNetNativeToolchain>
        <Optimize>true</Optimize>
      </PropertyGroup>
    
      ...
      ...<other section of the project>


    Windows Store Developer Solutions, follow us on Twitter: @WSDevSol|| Want more solutions? See our blog

    2015年12月22日 3:42
    版主
  • C++项目为什么不都用C++写,UWP C++应该完全支持,用了C#发布还要带一大堆DLL
    • 已编辑 Exilerrr 2015年12月23日 6:27
    2015年12月23日 6:27