Reputation: 17121
I am getting an exception in my WinUI3 app that Microsoft.ui.xaml.dll
is unable to load. I have included Microsoft.UI.Xaml and Microsoft.Graphics.Win2D in nuget.
System.DllNotFoundException
HResult=0x80131524
Message=Unable to load DLL 'Microsoft.ui.xaml.dll' or one of its dependencies: The specified module could not be found. (0x8007007E)
Source=TibraUI
StackTrace:
at TibraUI.Program.XamlCheckProcessRequirements()
at TibraUI.Program.Main(String[] args) in C:\Users\Bryan\src\tibra\Tibra\TibraUI\obj\x64\Debug\net6.0-windows10.0.19041.0\win10-x64\App.g.i.cs:line 28
Windows Version 21H1 Build 19043.1348
My App.xaml
<Application
x:Class="TibraUI.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:TibraUI">
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<XamlControlsResources xmlns="using:Microsoft.UI.Xaml.Controls" />
<!-- Other merged dictionaries here -->
</ResourceDictionary.MergedDictionaries>
<!-- Other app resources here -->
</ResourceDictionary>
</Application.Resources>
</Application>
Upvotes: 18
Views: 17092
Reputation: 21
I solve my problem for "Blank App, Packaged with WAP (WinUI 3 in Desktop)". I need to build both packages:
By default you can build only signed packaged. But simply add <WindowsAppSDKSelfContained>true</WindowsAppSDKSelfContained>
into csproj in app project, not in Package project.
Now you can build app that launch via .exe.
When you need build signed package, just comment WindowsAppSDKSelfContained
.
Full .csproj:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>WinExe</OutputType>
<TargetFramework>net6.0-windows10.0.19041.0</TargetFramework>
<TargetPlatformMinVersion>10.0.17763.0</TargetPlatformMinVersion>
<RootNamespace>ButLoaderWin32</RootNamespace>
<ApplicationManifest>app.manifest</ApplicationManifest>
<Platforms>x86;x64;ARM64</Platforms>
<RuntimeIdentifiers>win10-x86;win10-x64;win10-arm64</RuntimeIdentifiers>
<UseWinUI>true</UseWinUI>
<!-- comment WindowsAppSDKSelfContained if you want packaged app for WinStore, uncomment if you want unpackaged app without certification-->
<WindowsAppSDKSelfContained>true</WindowsAppSDKSelfContained>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.WindowsAppSDK" Version="1.3.230602002" />
<PackageReference Include="Microsoft.Windows.SDK.BuildTools" Version="10.0.22621.755" />
<Manifest Include="$(ApplicationManifest)" />
</ItemGroup>
</Project>
Upvotes: 1
Reputation: 61
Issue is resolved adding a launchSettings.json with:
{
"profiles": {
"Windows Machine": {
"commandName": "MsixPackage",
"nativeDebugging": false
}
}
}
Upvotes: 1
Reputation: 171
In the app project file, inside the main PropertyGroup, add <WindowsAppSDKSelfContained>true</WindowsAppSDKSelfContained>
as shown below.
<PropertyGroup>
<OutputType>WinExe</OutputType>
<TargetFramework>net6.0-windows10.0.19041.0</TargetFramework>
<TargetPlatformMinVersion>10.0.17763.0</TargetPlatformMinVersion>
<RootNamespace>EPicker</RootNamespace>
<ApplicationManifest>app.manifest</ApplicationManifest>
<Platforms>x86;x64;arm64</Platforms>
<RuntimeIdentifiers>win10-x86;win10-x64;win10-arm64</RuntimeIdentifiers>
<PublishProfile>win10-$(Platform).pubxml</PublishProfile>
<UseWinUI>true</UseWinUI>
<EnableMsixTooling>true</EnableMsixTooling>
<WindowsAppSDKSelfContained>true</WindowsAppSDKSelfContained>
</PropertyGroup>
Upvotes: 17
Reputation: 21
I was able to solve the issue in the following way:
I created a Uno WinUI 3 .NET 6 project using dotnet new unoapp-winui-net6 from the command prompt. I had to update the Windows.Desktop.csproj reference from:
<ItemGroup>
<FrameworkReference Update="Microsoft.Windows.SDK.NET.Ref" RuntimeFrameworkVersion="10.0.18362.16" />
<FrameworkReference Update="Microsoft.Windows.SDK.NET.Ref" TargetingPackVersion="10.0.18362.16" />
</ItemGroup>
to:
<ItemGroup>
<FrameworkReference Update="Microsoft.Windows.SDK.NET.Ref" RuntimeFrameworkVersion="10.0.19041.22" />
<FrameworkReference Update="Microsoft.Windows.SDK.NET.Ref" TargetingPackVersion="10.0.19041.22" />
</ItemGroup>
and in the Windows.Package.wapproj, I updated
<ItemGroup>
<PackageReference Include="Microsoft.WindowsAppSDK" Version="[1.0.0-experimental1]">
<IncludeAssets>build</IncludeAssets>
</PackageReference>
</ItemGroup>
to
<ItemGroup>
<PackageReference Include="Microsoft.WindowsAppSDK" Version="[1.0.0]">
<IncludeAssets>build</IncludeAssets>
</PackageReference>
</ItemGroup>
(see also https://github.com/unoplatform/uno/discussions/7617)
In the Configuration Manager in Visual Studio 2022 Preview 1.1, I then had to change the platform for Windows.Desktop to x64 (was x86). Windows.package should also be x64.
I set the Windows.Package project as the startup project. I could build and start the application without the error.
Upvotes: 1
Reputation: 6933
Run the package as the startup project. It's not intuitive, but the main project is not meant to run.
This answer only applies to those who created a project that included a package project.
Upvotes: 22