本文主要介绍使用DotNet CLI创建自定义WPF项目模板,分享给大家。详情如下:
描述
我们安装完DotNetCore 3.0版本的SDK后,我们就可以基于DotNetCore创建WPF项目模板了。我们可以通过以下 CLI 轻松快速地创建和运行我们的项目:
dotnet 新 wpf -n WpfApp cdWpf应用程序 点网恢复 点网运行
做过WPF开发的朋友都知道,这个项目模板肯定达不到我们的预期。我们希望我们的项目模板能够添加MVVM的默认代码段并与DotNetCore紧密配合。不是更方便吗? ?因此,本文使用MVVM的实现MvvmLightStd10来教您如何创建我们理想的项目模板。
操作
首先,我们基于DotNetCore 3.0创建一个原始的WPF项目模板,然后引用以下库:
可以通过执行cli命令安装
dotnet 添加包 Microsoft.Extensions.DependencyInjection dotnet添加包MvvmLightLibsStd10
注意:因为我们使用DotNetCore,所以我们尝试使我们安装的第三方包基于.NET Standard。
然后,尝试修改我们的项目,将其更改为我们以后想要创建的项目模板。您可以参考我的修改如下:
项目结构如下图:
其中srcModelsDataItem.cs的示例代码如下:
使用系统; 使用 System.Collections.Generic; 使用系统文本; 命名空间 WpfApp.Models { 公共类数据项 { 公共字符串标题{获取;私人套装; } 公共数据项(字符串标题) { 标题=标题; } } }
srcModelsIDataService.cs 的示例代码如下所示:
使用系统; 使用 System.Collections.Generic; 使用系统文本; 命名空间 WpfApp.Models { 公共接口IDataService { void GetData(Action回调); } }
srcModelsDataService.cs 的示例代码如下所示:
使用系统; 使用 System.Collections.Generic; 使用系统文本; 命名空间 WpfApp.Models { 公共类数据服务:IDataService { 公共无效GetData(操作回调) { var item = new DataItem("你好.NET Core!"); 回调(项目,空); }} }
srcViewModelsMainViewModel.cs 的示例代码如下所示:
使用 GalaSoft.MvvmLight; 使用 WpfApp.Models; 命名空间 WpfApp.ViewModels { 公共类 MainViewModel :ViewModelBase { 私有只读 IDataService _dataService; 私有字符串_welcomeTitle; 公共字符串WelcomeTitle { 获取{返回_welcomeTitle; } 设置{设置(参考_welcomeTitle,值); } } 公共MainViewModel(IDataService数据服务) { _dataService = 数据服务; _dataService.GetData( (项目,错误)=> { 如果(错误!=空) { 返回; } WelcomeTitle = 项目.Title; }); } } }
srcViewsMainView.xaml 的示例代码如下所示:
<窗口 x:class="WpfApp.Views.MainView" xmlns="http://www.sychzs.cn/winfx/2006/xaml/presentation" xmlns:x="http://www.sychzs.cn/winfx/2006/xaml"xmlns:d="http://www.sychzs.cn/expression/blend/2008" xmlns:local="clr-命名空间:WpfApp" xmlns:mc =“http://www.sychzs.cn/markup-compatibility/2006” 标题=“主窗口” 宽度=“800” 高度=“450” mc:ignorable="d"><标签 水平对齐=“居中” 垂直对齐=“居中” content="{绑定WelcomeTitle}" 字体大小=“40”/>
srcViewsMainView.xaml.cs 的示例代码如下所示:
使用系统.Windows; 使用 WpfApp.ViewModels; 命名空间 WpfApp.Views { 公共部分类 MainView :窗口 { 公共MainView(MainViewModel虚拟机) { 初始化组件(); this.DataContext = vm; } } }
srcApp.xaml 的示例代码如下所示:
<应用 x:class="www.sychzs.cn" xmlns="http://www.sychzs.cn/winfx/2006/xaml/presentation" xmlns:x="http://www.sychzs.cn/winfx/2006/xaml" xmlns:local="clr-namespace:WpfApp"/>
srcApp.xaml.cs 的示例代码如下所示:
使用 Microsoft.Extensions.DependencyInjection; 使用系统.Windows; 使用 WpfApp.Models; 使用 WpfApp.ViewModels; 使用 WpfApp.Views; 命名空间 WpfApp { 公共部分类App:应用程序 { 公共 ServiceProvider ServiceProvider { 获取;私人套装; } protected override void OnStartup(StartupEventArgs e) { 基础.OnStartup(e); var serviceCollection = new ServiceCollection(); 配置服务(服务集合); ServiceProvider = serviceCollection.BuildServiceProvider(); var mainWindow = ServiceProvider.GetRequiredService(); www.sychzs.cn(); } 私有无效ConfigureServices(ServiceCollection服务) { services.AddTransient (); services.AddTransient (); services.AddScoped (); } } }
修改完成后,尝试编译运行我们的项目,确保能够正常编译运行。
之后,在我们的项目根目录src下新建一个.template.config文件夹,然后在其中新建一个template.json文件,并执行以下示例配置:
{"$schema": "http://www.sychzs.cn/template", "作者": "嬉皮周", “分类”:[“wpf”,“mvvmlight”,“依赖注入”], "name": "wpf mvvmlight: 使用 dotnetcore 使用 mvvmlight 创建 wpf。", “标签”:{ “语言”:“C#”, “类型”:“项目” }, “身份”:“wpf.mvvmlight”, "shortName": "wpf-mvvmlight", "sourceName": "wpf.mvvmlight", “preferNameDirectory”:true }
最后,打开我们的终端,将目录切换到当前项目目录(.template.config所在目录),然后进行以下安装操作
dotnet new -i C:UsershippieZhouDesktophelloworldwpfapp
此时,我们的项目模板就会被打包到DotNetCore的CLI中,如下图:
同时C:UsershippieZhou.templateenginedotnetcliv3.0.100-preview3-010431目录下以templatecache.json结尾的JSON文件内容也会被修改,在TemplateInfo节点下添加如下节点内容:
{ "ConfigMountPointId": "f3861181-7a43-4fc5-ab1c-12d95e734c0a","作者": "嬉皮周", “分类”:[ “wpf”, “mvvmlight”, “依赖注入” ], “默认名称”:空, “描述”: ””, "身份": "wpf.mvvmlight", "GeneratorId": "0c434df7-e2cb-4dee-b216-d7c58c8eb4b3", "组身份": "", “优先级”:0, "Name": "wpf mvvmlight: 使用 dotnetcore 使用 mvvmlight 创建 wpf。", “短名称列表”:[ “wpf-mvvmlight” ], “标签”:{ “语言”: { “描述”:空, “选择和描述”:{ “C#”: ”” }, “默认值”:“C#” }, “类型”: { “描述”:空, “选择和描述”:{ “项目”: ”” }, “默认值”:“项目” } }, “缓存参数”:{ “姓名”: { “数据类型”:“字符串”, “默认值”:空, "Description": "默认名称符号" } }, "ConfigPlace": "/.template.config/template.json","LocaleConfigMountPointId": "00000000-0000-0000-0000-000000000000", “LocaleConfigPlace”:空, "HostConfigMountPointId": "00000000-0000-0000-0000-000000000000", “HostConfigPlace”:空, “第三方通知”:空, “基线信息”:{}, “HasScriptRunningPostActions”:假, “ConfigTimestampUtc”:空 },
注意:如果以后我们不小心删除了我们的模板,我们可以通过删除这两个文件中对应的模板节点来取消CLI中的应用。
我们可以通过以下操作来测试:
# 使用我们定制的项目模板创建wpf项目 dotnet 新 wpf-mvvmlight -n 测试 光盘测试 点网恢复 点网运行
不出意外的话,我们可以看到这个项目的代码片段和我们自定义的模板代码片段是一样的。
如果您想卸载我们的项目模板,可以使用以下命令:
dotnet new -u C:UsershippieZhouDesktophelloworldwpfapp
注意:我们需要保证我们的自定义模板不能丢失,否则到时候卸载就会很麻烦(至少目前看来是这样)。
关于如何将我们的自定义模板上传到NuGet以供其他人下载使用,这里就不介绍了。具体操作可以参考园子介绍如何在DotNetCore MVC中创建自己的项目模板。方法是一样的。我在本文中创建的代码模板将不会提交。最好还是等 MVVMLight 的原作者 Laurent Bugnion 去做吧。
总结
本文介绍如何通过 DotNet CLI 创建自定义 WPF 项目模板。在实际使用中,CLI会有更多的功能和支持的参数,有兴趣的朋友可以自行研究。
相关参考
如何在dot-net-core中创建dot-net新项目模板
构建您自己的.NET Core项目模板