Browse Source

Solve app.manifest error in Win32NativeControlHost

Max Katz 3 năm trước cách đây
mục cha
commit
9db00cf9de

+ 1 - 0
samples/ControlCatalog.NetCore/ControlCatalog.NetCore.csproj

@@ -45,6 +45,7 @@
   <PropertyGroup>
   <PropertyGroup>
     <!-- For Microsoft.CodeAnalysis -->
     <!-- For Microsoft.CodeAnalysis -->
     <SatelliteResourceLanguages>en</SatelliteResourceLanguages>
     <SatelliteResourceLanguages>en</SatelliteResourceLanguages>
+    <ApplicationManifest>app.manifest</ApplicationManifest>
   </PropertyGroup>
   </PropertyGroup>
 
 
   <Import Project="..\..\build\SampleApp.props" />
   <Import Project="..\..\build\SampleApp.props" />

+ 28 - 0
samples/ControlCatalog.NetCore/app.manifest

@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="utf-8"?>
+<assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1">
+  <assemblyIdentity version="1.0.0.0" name="ControlCatalog.app"/>
+
+  <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
+    <application>
+      <!-- A list of the Windows versions that this application has been tested on
+           and is designed to work with. Uncomment the appropriate elements
+           and Windows will automatically select the most compatible environment. -->
+
+      <!-- Windows Vista -->
+      <!--<supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}" />-->
+
+      <!-- Windows 7 -->
+      <!--<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}" />-->
+
+      <!-- Windows 8 -->
+      <!--<supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}" />-->
+
+      <!-- Windows 8.1 -->
+      <!--<supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}" />-->
+
+      <!-- Windows 10 -->
+      <supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}" />
+
+    </application>
+  </compatibility>
+</assembly>

+ 4 - 0
src/Windows/Avalonia.Win32/Win32NativeControlHost.cs

@@ -94,6 +94,10 @@ namespace Avalonia.Win32
                     IntPtr.Zero,
                     IntPtr.Zero,
                     IntPtr.Zero,
                     IntPtr.Zero,
                     IntPtr.Zero);
                     IntPtr.Zero);
+
+                if (Handle == IntPtr.Zero)
+                    throw new InvalidOperationException("Unable to create child window for native control host. Application manifest with supported OS list might be required.");
+
                 if (layered)
                 if (layered)
                     UnmanagedMethods.SetLayeredWindowAttributes(Handle, 0, 255,
                     UnmanagedMethods.SetLayeredWindowAttributes(Handle, 0, 255,
                         UnmanagedMethods.LayeredWindowFlags.LWA_ALPHA);
                         UnmanagedMethods.LayeredWindowFlags.LWA_ALPHA);