Avalonia硬配.NET Framework 4.8

Warning:这种方法能保证运行初始项目,但至于有没有什么其他问题我就不知道了,根据Avalonia官网的说法,Avalonia基于.NET Standard 2.0构建,该标准涵盖从.NET Framework 4.6.2直至.NET 9。
根据社区讨论,预期在Avalonia 12将终止对.NET Standard 2.0的支持,见https://github.com/AvaloniaUI/Avalonia/discussions/18606

Avalonia版本:11.3

.NET Framework 4.8
本文地址:https://www.cnblogs.com/oberon-zjt0806/p/18984823

首先按照一般流程创建Avalonia .NET (Mvvm) App项目,在默认状态下,Avalonia将使用.NET 8.0,直接编辑项目文件,修改目标平台<TargetPlatform>net4.8

然而,Avalonia中用到了相当多的新版本语言特性,.NET Framework 4.8官方最大支持为C# 7.3,Nullable引用类型是不支持的。于是通过<LangVersion>修改语言版本为8.0(如果项目文件里没有,则在<PropertyGroup>中手动添加)。修改完的项目文件如下所示:

xml 复制代码
<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <OutputType>WinExe</OutputType>
    <TargetFramework>net4.8</TargetFramework> <!--Modified-->
    <Nullable>enable</Nullable>
    <BuiltInComInteropSupport>true</BuiltInComInteropSupport>
    <ApplicationManifest>app.manifest</ApplicationManifest>
    <AvaloniaUseCompiledBindingsByDefault>true</AvaloniaUseCompiledBindingsByDefault>
    <LangVersion>8.0</LangVersion> <!--Added-->
  </PropertyGroup>

  <ItemGroup>
    <Folder Include="Models\" />
    <AvaloniaResource Include="Assets\**" />
  </ItemGroup>

  <ItemGroup>
    <PackageReference Include="Avalonia" Version="11.3.0" />
    <PackageReference Include="Avalonia.Desktop" Version="11.3.0" />
    <PackageReference Include="Avalonia.Themes.Fluent" Version="11.3.0" />
    <PackageReference Include="Avalonia.Fonts.Inter" Version="11.3.0" />
    <!--Condition below is needed to remove Avalonia.Diagnostics package from build output in Release configuration.-->
    <PackageReference Include="Avalonia.Diagnostics" Version="11.3.0">
      <IncludeAssets Condition="'$(Configuration)' != 'Debug'">None</IncludeAssets>
      <PrivateAssets Condition="'$(Configuration)' != 'Debug'">All</PrivateAssets>
    </PackageReference>
    <PackageReference Include="CommunityToolkit.Mvvm" Version="8.2.1" />
  </ItemGroup>
</Project>

然后,还差一个位置------在ViewLocator.cs中,有一句

csharp 复制代码
var name = param.GetType().FullName?.Replace("ViewModel", "View", StringComparison.Ordinal);

这里String.Replace方法用了一个(string oldValue,string newValue,StringComparison compType)的重载版本,这个重载版本直至.NET Core 2.0开始才有,是不受.NET Framework 4.8支持的。因此我们需要删掉最后一个参数StringComparison.Ordinal,这个参数只影响Replace方法在oldValue中的搜索模式,基本不会影响替换结果。

全部完成后我们就可以构建初始项目------

可以看出,Avalonia在.NET Framework 4.8的环境下生成并运行了。当然了,这种情况下Avalonia跨平台的特性就不再支持了。

相关推荐
夏树同学2 小时前
Newtonsoft技巧/与System.Text.Json的对比
.net
脑电信号要分类4 小时前
将多张图片拼接成一个pdf文件输出
pdf·c#·apache
njsgcs5 小时前
c# solidworks 折弯系数检查
开发语言·c#
格林威6 小时前
工业相机图像采集:Grab Timeout 设置建议——拒绝“假死”与“丢帧”的黄金法则
开发语言·人工智能·数码相机·计算机视觉·c#·机器视觉·工业相机
唐青枫6 小时前
C#.NET SignalR + Redis Backplane 深入解析:多节点部署与跨实例消息同步
c#·.net
Java开发追求者8 小时前
.NET Framework,Version=v4.8下载地址
.net·.net framework·version=v4.8
毕设源码-赖学姐8 小时前
【开题答辩全过程】以 基于.NET MVC的婚庆服务系统设计为例,包含答辩的问题和答案
mvc·.net
步步为营DotNet8 小时前
#.NET Aspire在云原生应用部署与管理中的深度实践
云原生·.net
FL162386312919 小时前
[C#][winform]segment-anything分割万物部署onnx模型一键抠图演示
开发语言·c#
彭波39620 小时前
.NET Framework 3.5问题修复教程!可以离线修复
windows·安全·电脑·.net·开源软件