Почему в приложении Xamarin UWP не выполняется бинарный анализатор и проверки поддерживаемого API? - PullRequest
0 голосов
/ 03 мая 2018

Возникла эта проблема некоторое время с моим приложением Xamarin.Forms. Я могу успешно собрать пакет приложения UWP, но он всегда не проходит тест WACK по следующим причинам:

Бинарный анализатор

Обнаружена ошибка: тест двоичного анализатора обнаружил следующие ошибки:

Файл C: \ Program Files \ windowsapps [имя приложения] r_2.1.2.0_x64__tpaj9sfh9f80r \ clrjit.dll не прошел проверку AppContainerCheck.

Влияние, если оно не устранено: если приложение не использует доступные средства защиты Windows, оно может повысить уязвимость компьютера клиента к вредоносному ПО.

Как исправить: примените необходимые параметры компоновщика - SAFESEH, DYNAMICBASE, NXCOMPAT и APPCONTAINER - при связывании приложения.

и

Поддерживаемые API

Обнаружена ошибка: в тесте поддерживаемых API обнаружены следующие ошибки:

API SystemFunction036 в advapi32.dll не поддерживается для этого типа приложения. clrjit.dll вызывает этот API.

API DebugBreak в kernel32.dll не поддерживается для этого типа приложения. clrjit.dll вызывает этот API.

API HeapValidate в kernel32.dll не поддерживается для этого типа приложения. clrjit.dll вызывает этот API.

API LoadLibraryExW в kernel32.dll не поддерживается для этого типа приложения. clrjit.dll вызывает этот API.

API RtlCaptureContext в kernel32.dll не поддерживается для этого типа приложения. clrjit.dll вызывает этот API.

API RtlVirtualUnwind в kernel32.dll не поддерживается для этого типа приложения. clrjit.dll вызывает этот API.

API UnhandledExceptionFilter в kernel32.dll не поддерживается для этого типа приложения. clrjit.dll вызывает этот API.

API VirtualAlloc в kernel32.dll не поддерживается для этого типа приложения. clrjit.dll вызывает этот API.

API VirtualProtect в kernel32.dll не поддерживается для этого типа приложения. clrjit.dll вызывает этот API.

Влияние, если не исправлено: использование API, не входящего в состав Windows SDK для приложений Магазина Windows, нарушает требования сертификации Магазина Windows.

Как исправить: Просмотрите сообщения об ошибках, чтобы определить API, который не является частью Windows SDK для приложений Магазина Windows. Обратите внимание, что приложения, встроенные в конфигурацию отладки или без поддержки .NET Native (где применимо), могут не пройти этот тест, поскольку в этих средах могут использоваться неподдерживаемые API. Повторно протестируйте свое приложение в конфигурации выпуска и, если применимо, включите .NET Native.

Итак, я проверил, и он всегда встроен в конфигурацию выпуска и всегда с включенным .NET Native. Вот содержимое моего csproj:

      <PropertyGroup>
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    <Platform Condition=" '$(Platform)' == '' ">x86</Platform>
    <ProjectGuid>{F81FFB5A-CDC4-4EBB-B24E-43C2153EF76B}</ProjectGuid>
    <OutputType>AppContainerExe</OutputType>
    <AppDesignerFolder>Properties</AppDesignerFolder>
    <RootNamespace>[AppName]</RootNamespace>
    <AssemblyName>[AppName]</AssemblyName>
    <DefaultLanguage>en-US</DefaultLanguage>
    <TargetPlatformIdentifier>UAP</TargetPlatformIdentifier>
    <TargetPlatformVersion>10.0.16299.0</TargetPlatformVersion>
    <TargetPlatformMinVersion>10.0.16299.0</TargetPlatformMinVersion>
    <MinimumVisualStudioVersion>14</MinimumVisualStudioVersion>
    <EnableDotNetNativeCompatibleProfile>true</EnableDotNetNativeCompatibleProfile>
    <FileAlignment>512</FileAlignment>
    <ProjectTypeGuids>{A5A43C5B-DE2A-4C0C-9213-0A381AF9435A};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
    ...
    <RuntimeIdentifiers>win10-arm;win10-arm-aot;win10-x86;win10-x86-aot;win10-x64;win10-x64-aot</RuntimeIdentifiers>
    <AppxAutoIncrementPackageRevision>False</AppxAutoIncrementPackageRevision>
    <AppxBundle>Always</AppxBundle>
    <AppxBundlePlatforms>x86|x64|arm</AppxBundlePlatforms>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|ARM'">
    <DebugSymbols>true</DebugSymbols>
    <OutputPath>bin\ARM\Debug\</OutputPath>
    <DefineConstants>DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>
    <NoWarn>;2008</NoWarn>
    <DebugType>full</DebugType>
    <PlatformTarget>ARM</PlatformTarget>
    <UseVSHostingProcess>false</UseVSHostingProcess>
    <ErrorReport>prompt</ErrorReport>
    <Prefer32Bit>true</Prefer32Bit>
    <UseDotNetNativeToolchain>true</UseDotNetNativeToolchain>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|ARM'">
    <OutputPath>bin\ARM\Release\</OutputPath>
    <DefineConstants>TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>
    <Optimize>true</Optimize>
    <NoWarn>;2008</NoWarn>
    <DebugType>pdbonly</DebugType>
    <PlatformTarget>ARM</PlatformTarget>
    <UseVSHostingProcess>false</UseVSHostingProcess>
    <ErrorReport>prompt</ErrorReport>
    <Prefer32Bit>true</Prefer32Bit>
    <UseDotNetNativeToolchain>true</UseDotNetNativeToolchain>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
    <DebugSymbols>true</DebugSymbols>
    <OutputPath>bin\x64\Debug\</OutputPath>
    <DefineConstants>DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>
    <NoWarn>;2008</NoWarn>
    <DebugType>full</DebugType>
    <PlatformTarget>x64</PlatformTarget>
    <UseVSHostingProcess>false</UseVSHostingProcess>
    <ErrorReport>prompt</ErrorReport>
    <Prefer32Bit>true</Prefer32Bit>
    <UseDotNetNativeToolchain>true</UseDotNetNativeToolchain>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
    <OutputPath>bin\x64\Release\</OutputPath>
    <DefineConstants>TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>
    <Optimize>true</Optimize>
    <NoWarn>;2008</NoWarn>
    <DebugType>pdbonly</DebugType>
    <PlatformTarget>x64</PlatformTarget>
    <UseVSHostingProcess>false</UseVSHostingProcess>
    <ErrorReport>prompt</ErrorReport>
    <Prefer32Bit>true</Prefer32Bit>
    <UseDotNetNativeToolchain>true</UseDotNetNativeToolchain>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
    <DebugSymbols>true</DebugSymbols>
    <OutputPath>bin\x86\Debug\</OutputPath>
    <DefineConstants>DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>
    <NoWarn>;2008</NoWarn>
    <DebugType>full</DebugType>
    <PlatformTarget>x86</PlatformTarget>
    <UseVSHostingProcess>false</UseVSHostingProcess>
    <ErrorReport>prompt</ErrorReport>
    <Prefer32Bit>true</Prefer32Bit>
    <UseDotNetNativeToolchain>true</UseDotNetNativeToolchain>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
    <OutputPath>bin\x86\Release\</OutputPath>
    <DefineConstants>TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>
    <Optimize>true</Optimize>
    <NoWarn>;2008</NoWarn>
    <DebugType>pdbonly</DebugType>
    <PlatformTarget>x86</PlatformTarget>
    <UseVSHostingProcess>false</UseVSHostingProcess>
    <ErrorReport>prompt</ErrorReport>
    <Prefer32Bit>true</Prefer32Bit>
    <UseDotNetNativeToolchain>true</UseDotNetNativeToolchain>
  </PropertyGroup>

Я действительно не прогрессирую с этим и не могу опубликовать в магазине в данный момент. Для чего это стоит, Android и iOS прекрасно создают и публикуют.

Любая помощь будет оценена

Будет

...