UNO 新建基礎庫項目構建提示 UNOB0002 錯誤

當咱新建了一個 UNO 的基礎庫或被引用的項目時,可能採用的是默認的基礎庫或庫項目創建方法,被引用的程序集沒有帶上 WinUI 的黑科技,導致構建提示 UNOB0002: Project XX contains a reference to Uno Platform but does not contain a WinAppSDK compatible target framework. 失敗

如下面代碼,這是默認我新建的項目的代碼,以下代碼已經添加了對 windows10.0.19041 的引用了

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFrameworks Condition="$([MSBuild]::IsOSPlatform('windows')) or '$(EnableWindowsTargeting)' == 'true'">$(TargetFrameworks);$(DotNetVersion)-windows10.0.19041</TargetFrameworks>
    <TargetFrameworks>$(TargetFrameworks);$(DotNetVersion);</TargetFrameworks>
    <TargetFrameworks Condition="'$(OverrideTargetFramework)'!=''">$(OverrideTargetFramework)</TargetFrameworks>

    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Uno.WinUI" />
  </ItemGroup>
</Project>

然而以上代碼依然會在構建時失敗

遇到錯誤 UNOB0002: Project XX contains a reference to Uno Platform but does not contain a WinAppSDK compatible target framework.

根據 UNO 官方的文檔的如下描述

This error code means that a WinAppSDK project is referencing a project in your solution which is not providing a net7.0-windows10.xx TargetFramework.
This can happen if a project contains only a net7.0 TargetFramework and has a NuGet reference to Uno.WinUI.
To fix this, it is best to start from a Cross Platform Library project template provided by the Uno Platform visual studio extension, or using dotnet new.

解決方法是通過 VisualStudio 模版新建爲 UNO 的 Library 項目,或者替換 csproj 爲以下代碼

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFrameworks Condition="$([MSBuild]::IsOSPlatform('windows')) or '$(EnableWindowsTargeting)' == 'true'">$(TargetFrameworks);net7.0-windows10.0.19041</TargetFrameworks>
    <TargetFrameworks>$(TargetFrameworks);net7.0;net7.0-ios;net7.0-maccatalyst;net7.0-android</TargetFrameworks>
    <!-- Ensures the .xr.xml files are generated in a proper layout folder -->
    <GenerateLibraryLayout>true</GenerateLibraryLayout>
  </PropertyGroup>
  <ItemGroup>
    <PackageReference Include="Uno.WinUI" />
  </ItemGroup>
  <Choose>
    <When Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'windows'">
      <ItemGroup>
        <PackageReference Include="Microsoft.WindowsAppSDK"  />
        <PackageReference Include="Microsoft.Windows.SDK.BuildTools" />
      </ItemGroup>
      <ItemGroup>
        <!--
				If you encounter this error message:

					error NETSDK1148: A referenced assembly was compiled using a newer version of Microsoft.Windows.SDK.NET.dll.
					Please update to a newer .NET SDK in order to reference this assembly.

				This means that the two packages below must be aligned with the "build" version number of
				the "Microsoft.Windows.SDK.BuildTools" package above, and the "revision" version number
				must be the highest found in https://www.nuget.org/packages/Microsoft.Windows.SDK.NET.Ref.
				-->
        <!-- <FrameworkReference Update="Microsoft.Windows.SDK.NET.Ref" RuntimeFrameworkVersion="10.0.22621.28" />
				<FrameworkReference Update="Microsoft.Windows.SDK.NET.Ref" TargetingPackVersion="10.0.22621.28" /> -->
      </ItemGroup>
    </When>
    <Otherwise>
      <ItemGroup>
        <Content Include="Assets\**" />
        <Page Include="**\*.xaml" Exclude="bin\**\*.xaml;obj\**\*.xaml" />
        <Compile Update="**\*.xaml.cs">
          <DependentUpon>%(Filename)</DependentUpon>
        </Compile>
        <PriResource Include="**\*.resw" />
      </ItemGroup>
    </Otherwise>
  </Choose>
  <ItemGroup>
    <UpToDateCheckInput Include="**\*.xaml" Exclude="bin\**\*.xaml;obj\**\*.xaml" />
  </ItemGroup>
</Project>

由於代碼比較長,推薦大家還是使用自帶的模版創建比較方便

本文以上代碼放在githubgitee 歡迎訪問

可以通過如下方式獲取本文的源代碼,先創建一個空文件夾,接着使用命令行 cd 命令進入此空文件夾,在命令行裏面輸入以下代碼,即可獲取到本文的代碼

git init
git remote add origin https://gitee.com/lindexi/lindexi_gd.git
git pull origin 02e2942f9b223eb2dcc66f19441a8f68f2200837

以上使用的是 gitee 的源,如果 gitee 不能訪問,請替換爲 github 的源。請在命令行繼續輸入以下代碼

git remote remove origin
git remote add origin https://github.com/lindexi/lindexi_gd.git
git pull origin 02e2942f9b223eb2dcc66f19441a8f68f2200837

獲取代碼之後,進入 LacebayjeejiBehebilawla 文件夾

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章