dotnet 使用 XWT 构建跨平台客户端 入门篇
本文告诉大家如何入门开始开发一个基于 mono 组织开源的 XWT 跨平台客户端 UI 框架的应用,本文的 xwt 是在 GitHub 上完全开源的,基于 MIT 协议的,底层采用 GTK# 的 UI 框架
此 xwt 在设计上是通过 mono 进行跨平台运行的,而非采用 dotnet core 方式进行跨平台运行的,因此暂时只能使用 dotnet framework 4.7.2 版本,而不支持 dotnet core 版本。至少在 2021.08.09 依然是不支持在 dotnet core 运行
在开始之前,将会因为 xwt 依赖 GTK# 的环境而需要先部署 GTK# 的开发环境
从官网 下载 GTK#
的 x86 安装包或 mono x86 的应用
安装到默认路径,也就是在 C:\Program Files (x86)\GtkSharp\2.12\bin
路径,默认安装的时候会加入到环境变量。详细请参阅 Xamarin 使用 GTK 提示找不到 libglib-2.0-0.dll 找不到
接着打开 VisualStudio 完成 .NET Framework 4.7.2 和 dotnet core 负载(为了mono的默认安装)的安装,以及桌面开发 (xwt 可以基于 wpf 版本)的安装
以上就是所有的环境部署步骤,对于大部分开发者,只需要去下载 GtkSharp 安装即可。我依然推荐安装到默认路径,无论是 GtkSharp 还是 VisualStudio 都放在默认路径
新建一个 dotnet core 控制台项目
修改 csproj 项目文件,替换为如下代码
<project sdk="Microsoft.NET.Sdk">
<propertygroup>
<outputtype>Exe</outputtype>
<targetframeworks>net472;netcoreapp3.1</targetframeworks>
<platformtarget>x86</platformtarget>
</propertygroup>
<itemgroup>
<none include="C:\Program Files %28x86%29\GtkSharp\2.12\bin\*.dll" link="%(FileName).dll">
<copytooutputdirectory>PreserveNewest</copytooutputdirectory>
</none>
</itemgroup>
<itemgroup>
<packagereference include="Xwt.Gtk" version="0.2.247">
</packagereference></itemgroup>
</project>
以上代码就是设置框架是 .NET Framework 4.7.2 和 dotnet core 3.1 两个版本,当然当前是不能跑 dotnet core 3.1 的版本的。接着因为 GTK# 当前只支持客户端的 x86 版本,因此需要设置 PlatformTarget 作为 x86 版本
默认是不会去找到 GTK Sharp 的 DLL 内容的,因此通过如下代码引用所有的 DLL 用来输出
<itemgroup>
<none include="C:\Program Files %28x86%29\GtkSharp\2.12\bin\*.dll" link="%(FileName).dll">
<copytooutputdirectory>PreserveNewest</copytooutputdirectory>
</none>
</itemgroup>
打开 Program.cs 文件,添加如 xwt 官方开源仓库 https://github.com/mono/xwt 的例子
[STAThread]
static void Main(string[] args)
{
Application.Initialize(ToolkitType.Gtk);
var mainWindow = new Window()
{
Title = "Xwt Demo Application",
Width = 500,
Height = 400
};
mainWindow.Show();
Application.Run();
}
选择 .NET Framework 4.7.2 版本,尝试运行一下应用。默认即可看到显示了窗口
不嫌弃麻烦的话,还请自行下载代码,自己构建。可以通过如下方式获取本文的源代码,先创建一个空文件夹,接着使用命令行 cd 命令进入此空文件夹,在命令行里面输入以下代码,即可获取到本文的代码
git init
git remote add origin https://gitee.com/lindexi/lindexi_gd.git
git pull origin 11125ca50dc91e50cf581c36476f03b853bc7ef8
以上使用的是 gitee 的源,如果 gitee 不能访问,请替换为 github 的源
git remote remove origin
git remote add origin https://github.com/lindexi/lindexi_gd.git
获取代码之后,进入 LarwearceceyokuDokealuwo 文件夹
dotnet 使用 XWT 构建跨平台客户端 入门篇的更多相关文章
- gulp前端自动化构建工具新手入门篇
很久没有更新博文了. 经过了一次年前吐血的赶项目,终于在年后回血了.趁着有空,新学到了一个前端自动化构建工具-gulp. 现在我们通过这3个问题来学习一下: 1.什么是gulp? 2.为什么要用gul ...
- 如何在Visual Studio 2017中使用C# 7+语法 构建NetCore应用框架之实战篇(二):BitAdminCore框架定位及架构 构建NetCore应用框架之实战篇系列 构建NetCore应用框架之实战篇(一):什么是框架,如何设计一个框架 NetCore入门篇:(十二)在IIS中部署Net Core程序
如何在Visual Studio 2017中使用C# 7+语法 前言 之前不知看过哪位前辈的博文有点印象C# 7控制台开始支持执行异步方法,然后闲来无事,搞着,搞着没搞出来,然后就写了这篇博文,不 ...
- Spring boot学习1 构建微服务:Spring boot 入门篇
Spring boot学习1 构建微服务:Spring boot 入门篇 Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框 ...
- .NET Core实战项目之CMS 第二章 入门篇-快速入门ASP.NET Core看这篇就够了
作者:依乐祝 原文链接:https://www.cnblogs.com/yilezhu/p/9985451.html 本来这篇只是想简单介绍下ASP.NET Core MVC项目的(毕竟要照顾到很多新 ...
- net core体系-web应用程序-4asp.net core2.0 项目实战(CMS)-第二章 入门篇-快速入门ASP.NET Core看这篇就够了
.NET Core实战项目之CMS 第二章 入门篇-快速入门ASP.NET Core看这篇就够了 原文链接:https://www.cnblogs.com/yilezhu/p/9985451.ht ...
- CoreCLR源码探索(七) JIT的工作原理(入门篇)
很多C#的初学者都会有这么一个疑问, .Net程序代码是如何被机器加载执行的? 最简单的解答是, C#会通过编译器(CodeDom, Roslyn)编译成IL代码, 然后CLR(.Net Framew ...
- netty深入学习之一: 入门篇
netty深入学习之一: 入门篇 本文代码下载: http://download.csdn.net/detail/cheungmine/8497549 1)Netty是什么 Netty是Java NI ...
- Scala进阶之路-并发编程模型Akka入门篇
Scala进阶之路-并发编程模型Akka入门篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Akka Actor介绍 1>.Akka介绍 写并发程序很难.程序员不得不处 ...
- (转载)从Java角度理解Angular之入门篇:npm, yarn, Angular CLI
本系列从Java程序员的角度,带大家理解前端Angular框架. 本文是入门篇.笔者认为亲自动手写代码做实验,是最有效最扎实的学习途径,而搭建开发环境是学习一门新技术最需要先学会的技能,是入门的前提. ...
- netty深入学习之中的一个: 入门篇
netty深入学习之中的一个: 入门篇 本文代码下载: http://download.csdn.net/detail/cheungmine/8497549 1)Netty是什么 Netty是Java ...
随机推荐
- WPF设置传参、点击按钮改变长度
前台代码 <!-- 通过传递ElementName --> <Button x:Name="btn1" Width="200" Height= ...
- 记录--手写一个 v-tooltip 指令
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 前言 日常开发中,我们经常遇到过tooltip这种需求.文字溢出.产品文案.描述说明等等,每次都需要写一大串代码,那么有没有一种简单的方式 ...
- 记录--产品:请给我实现一个在web端截屏的功能!
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 一.故事的开始 最近产品又开始整活了,本来是毫无压力的一周,可以小摸一下鱼的,但是突然有一天跟我说要做一个在网页端截屏的功能. 作为一个工 ...
- [MAUI]模仿哔哩哔哩的一键三连
@ 目录 创建弧形进度条 绘制弧 准备物料 创建气泡 创建手势 创建交互与动效 项目地址 哔哩哔哩(Bilibili)中用户可以通过长按点赞键同时完成点赞.投币.收藏对UP主表示支持,后UP主多用&q ...
- FastJson反序列化2-1.2.24漏洞利用
1.1.2.24漏洞利用-JNDI 漏洞利用思路,如果某个类的set()方法中使用了JNDI,那么则可以使用JDNI注入执行任意命令.事实上在JDK8中就存在这样的类:JDBCRowSetImpl; ...
- #树状数组,CDQ分治#洛谷 4390 [BOI2007]Mokia 摩基亚
题目 分析 考虑离线处理,那么询问区间和就可以转换为四个询问, CDQ分治按横坐标处理询问,树状数组维护前缀和就可以了 代码 #include <cstdio> #include < ...
- C# Dev GridControl小结
1. 如何解决单击记录整行选中的问题 View->OptionsBehavior->EditorShowMode 设置为:Click 2. 如何新增一条记录 (1).gridView.Ad ...
- Qt 设置图标的三种方式
Qt 设置软件窗口图标有三种方式: 一.通过资源文件,设置图标 this->setWindowIcon(QIcon(":/logo.ico")); 二.通过 pro 文件,设 ...
- 知识图谱在RAG中的应用探讨
在这篇文章中,我们来详细探讨知识图谱(KG)在RAG流程中的具体应用场景. 缘起 关于知识图谱在现在的RAG中能发挥出什么样的作用,之前看了360 刘焕勇的一个分享,简单的提了使用知识图谱增强大模型的 ...
- 试用阿里云GPU服务器进行深度学习模型训练
试用阿里云GPU服务器进行深度学习模型训练 最近在用PyTorch时发现在本地训练模型速度一言难尽,然后发现阿里云可以白嫖gpu服务器,只要没有申请过PAI-DSW资源的新老用户都可以申请5000CU ...