【C#】Winform NanUI 0.88版本 用官方源码搭建原生态开发环境
目录
一、需求
NanUI 插件确实很方便,但想改其中的需求怎么办,下面就来自己搭建NanUI 原生开发环境,在此很感谢作者免费的开源。
如果下载比较慢,也可以选择码云进行下载。
二、搭建原生开发环境
1.导入源码
新建一个项目,将源码的 NetDimension.NanUI 文件夹复制到你的新建的项目中。这里先导入NetDimension.NanUI,是因为其他的插件代码,依赖这个程序集,在导入其他扩展程序集之前,请确保 NetDimension.NanUI 没有错误。
点击解决方案--->添加--->现有项目,选中NetDimension.NanUI.csproj,将NetDimension.NanUI 项目导入到你的项目中
2.解决源码报错
右键生成解决方案,这时项目会报错:
错误1
我们看看报错的地方:
public static ApplicationConfigurationBuilder UseApplicationDataDirectory( this ApplicationConfigurationBuilder @this, string path) { @this.Use(builder => { builder.Properties[nameof(UseApplicationDataDirectory)] = path; return (runtime, props) => { if (!props.ContainsKey(nameof(UseApplicationDataDirectory))) { return; } var path = (string)props[nameof(UseApplicationDataDirectory)]; runtime.ChromiumEnvironment.SettingConfigurations += new Action<CefSettings>(settings => { settings.CachePath = path; settings.LogFile = Path.Combine(path, "debug.log"); }); }; }, ExtensionExecutePosition.SubProcessStartup); return @this; }
在ApplicationConfigurationBuilder方法的参数中,原本有一个参数叫 path,但在方法里面又申请了一个path的变量,将path改为paths即可。
public static ApplicationConfigurationBuilder UseApplicationDataDirectory( this ApplicationConfigurationBuilder @this, string path) { @this.Use(builder => { builder.Properties[nameof(UseApplicationDataDirectory)] = path; return (runtime, props) => { if (!props.ContainsKey(nameof(UseApplicationDataDirectory))) { return; } var paths = (string)props[nameof(UseApplicationDataDirectory)]; runtime.ChromiumEnvironment.SettingConfigurations += new Action<CefSettings>(settings => { settings.CachePath = paths; settings.LogFile = Path.Combine(paths, "debug.log"); }); }; }, ExtensionExecutePosition.SubProcessStartup); return @this; }
错误2
另一个错误,和上面的错误一样,在Initialize方法里,原本就有一个args参数,这里将args改为_args即可。
var context = GetAppContext(); if (context == null) { context = ApplicationConfiguration.UseApplicationContext?.Invoke(); if (context != null) { context.ThreadExit += (_, _args) => { Application.Exit(); }; } }
3.导入其他项目
将其他的几个项目一样导入进来,包括FormiumClient
4.官方Demo运行效果
将FormiumClient设为启动项目,运行:
以上都是引入官方的Demo,下面我们自己新建一个项目吧
三、创建自己的NanUI项目
1.新建项目
点击解决方案,新建项目,注意这里要用Windows窗体应用
2.导入NanUI.Runtime扩展包
下面添加NanUI的Runtime 扩展包,这个主要是给项目生成CEF包用的,
3.添加NanUI程序集的引用
将我们项目需要用到的程序集添加进来,点击确定
新建的项目结构,如下图
4.MainIndex主界面相关代码
新建类 MainIndex
using NetDimension.NanUI; using NetDimension.NanUI.HostWindow; using NetDimension.NanUI.JavaScript; using System; using System.Drawing; namespace WinFormsApp2 { public class MainIndex : Formium { public override HostWindowType WindowType => HostWindowType.System; //public override string StartUrl => "https://www.baidu.com/"; public override string StartUrl => "static.app.local/index.html"; #region 浏览器函数 protected override void OnReady() { //显示控制台 //ShowDevTools(); //注册JS方法 MapClrObjectToJavaScript(); } private void MainIndex_BeforeClose(object sender, NetDimension.NanUI.Browser.FormiumCloseEventArgs e) { Console.WriteLine("[MainIndex]当浏览器关闭时"); } private void MainIndex_LoadEnd(object sender, NetDimension.NanUI.Browser.LoadEndEventArgs e) { Console.WriteLine("[MainIndex]当网页加载完成时"); } #endregion #region 注册JS方法 private void MapClrObjectToJavaScript() { var obj = JavaScriptValue.CreateObject(); //示例 obj.SetValue("JsCallCSharp", JavaScriptValue.CreateFunction(args => { return null; })); RegisterExternalObjectValue("CSharpProject", obj); } #endregion public MainIndex() { BeforeClose += MainIndex_BeforeClose; LoadEnd += MainIndex_LoadEnd; Size = new Size(1280, 800); StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; Title = "终端"; CanMaximize = false;//不允许使用最大化界面按钮 Resizable = false;//窗体是否能够改变大小 //Mask.BackColor = Color.White; } } }
5.Program程序入口相关代码
Program.cs 改为下面这样
using NetDimension.NanUI; using NetDimension.NanUI.LocalFileResource; using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using System.Windows.Forms; namespace WinFormsApp2 { static class Program { /// <summary> /// The main entry point for the application. /// </summary> [STAThread] static void Main() { //Application.SetHighDpiMode(HighDpiMode.SystemAware); //Application.EnableVisualStyles(); //Application.SetCompatibleTextRenderingDefault(false); //Application.Run(new Form1()); WinFormium.CreateRuntimeBuilder(env => { env.CustomCefCommandLineArguments(cmdLine => { // Configure command line arguments of Cef here. //cmdLine.AppendSwitch("disable-gpu"); //cmdLine.AppendSwitch("disable-gpu-compositing"); }); env.CustomCefSettings(settings => { // Configure default Cef settings here. settings.WindowlessRenderingEnabled = true; }); env.CustomDefaultBrowserSettings(cefSettings => { // Configure default browser settings here. }); }, app => { //读取本地资源 app.UseLocalFileResource("http", "static.app.local", System.IO.Path.Combine(Application.StartupPath, "View")); app.UseMainWindow(context => { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); return new MainIndex(); }); }) .Build() .Run(); } } }
6.读取本地前端文件的处理
新建一个View文件夹
将你的web前端代码复制进去
四、测试项目效果
运行,成功读取到了本地的html文件,那么使用NanUI源码搭建原生开发环境也就到此结束了
五、结束
如果这个帖子对你有用,欢迎给我点赞 + 留言,谢谢
猜你喜欢
- 【C#】Winform NanUI 0.77版本 读取嵌入式资源
- 引入NanUI框架这三个组件都要引入了,NetDimension.NanUI.AssemblyResourceHandler 是属于嵌入式资源部分,下载地址:由于作者已经废弃了这个版本,在VS2019中的 NuGet 程序包 中已经下载不了,我这里上传了,有需要的可以点击下面链接下载NanUI.AssemblyResourceHandler.0.7.4 下载 另外,NanUI.AssemblyResourceHandler 源码github地址:GitHub - maxjov
- 【C#】从零开始用C#写一个桌面应用程序(二)一个表白程序
- 恶搞表白小程序如何添加按钮,如何添加属性和事件请移步前文。基础操作第一步:新建窗口 在工具箱内找到label和button,拖到form上,设置它们的size属性,autosize属性,text属性。第二步:添加事件为了实现我们的效果,需要给三个按钮分别设计点击事件,鼠标移入事件,鼠标点下事件。分别为click,mouseenter,mousedown事件。第三步:实现移动逻辑this获取form对象,clientsize获取实时大小,使用随机数值,设置对应按钮位置。将对应
- 【C#】C# Winform 相册功能,图片缩放,拖拽,预览图分页
- 一、前言在一些项目中也会用到预览图片的功能,至于为什么有一个添加图片的按钮,是因为有些项目,比如视觉相关的项目,摄像头拍摄图片,然后显示在界面上,拍一次显示一张。另一个,就是分页功能,当预览图位置不够用时就会用到。当前软件的功能1.添加图片如果8个预览图都满了,会自动分页,就可以点击上一页,或者下一页了。2.点击预览图显示大图点击预览图,之前的拖拽和放大会自动复位3.大图可以拖拽,放大,缩小如果图片比较小,有这个功能就看到图片的更多细节了。4.图片倒序排列最后拍摄的图片,始终显示在前面,方便用户
- 【C#】C# NLua Winform 热更新
- 一、概述NLua 是一个用于 .NET 平台的 Lua 脚本绑定库。它允许在 C# 代码中嵌入 Lua 脚本,并允许两者之间进行交互。NLua 的主要特点包括:轻量级:NLua 是一个轻量级的库,易于集成到现有的 .NET 项目中。动态类型:Lua 是动态类型的语言,这意味着变量的类型可以在运行时改变。灵活的绑定:NLua 提供了灵活的绑定机制,使得 C# 和 Lua 之间的数据交互变得简单。丰富的 API:NLua 提供了丰富的 API,以便在 Lua 脚本中调用 .NET 的类和方法。调试支
- 【C#】C# Winform自动更新
- 目录一、需求二、更新文件列表生成器三、软件启动器1.判断是否需要更新2.文件下载3.执行 下载,覆盖,删除任务4.执行结果四、搭建更新服务器1.启动服务器2.新建项目本体3.给启动软件加密4.修改版本号五、整体测试1.生成更新文件2.软件更新3.下载最新的版本4.打开软件本体5.总结结束当前项目已停止维护,推荐使用 FTP 版自动更新C# 自动更新(基于FTP)_c# 程序自动升级-CSDN博客一、需求在Unity里面,有XLua,ILRuntime 这样的热更新框架,有Unity经验的人都知道
- 【C#】C# 自动更新(基于FTP)
- 目录一、前言二、功能的实现1.本地黑名单2.读取配置文件3.读取 FTP 文件列表4.读取本地文件5.匹配更新6.版本的切换三、环境搭建四、常见问题2023.12.30 更新结束效果启动软件后,会自动读取所有的 FTP 服务器文件,然后读取本地需要更新的目录,进行匹配,将 FTP 服务器的文件同步到本地Winform 界面一、前言在去年,我写了一个 C# 版本的自动更新,这个是根据配置文件 + 网站文件等组成的框架,以实现本地文件的新增、替换和删除,虽然实现了自动更新的功能,但用起来过于复杂,代
- 【C#】C#md5加密
- using System; using System.Collections.Generic; using System.Linq; using System.Security.Cryptography; using System.Text; using System.Threading.Tasks; namespace mdstr { internal
- 【C#】C# Winform 多个程序之间的通信(非Scoket)
- 效果功能:打开窗体自动连接主程序,并自动添加到列表,可以向子程序群发消息可以向单个程序单独发送消息在退出程序后,添加的程序列表会自动移除一、概述参考:C# Winfrom程序之间通讯_c# sendmessege copydatastruct 返回多个值_熊思宇的博客-CSDN博客在之前我写过 winform 程序与程序之间的通信,但是这个版本有个问题,那就是只能由两个程序进行通信,同时打开多个程序的话,接收方收到的数据就会一模一样,这次发表这个教程,也就是要解决这个问题。归根结底,还是&nbs