最近做了几个 WPF + MudBlazor 的小东西,每次从头搭建环境比较繁琐,然鹅搭建过程还没啥技术含量,索性就直接做了个模板,方便以后使用。

1. 介绍

  • 一个用来创建 .NET 8 + WPF + MudBlazor 的项目模板
  • 适用于 VS2022

用法:vs插件市场下载 or 自己通过 Github 源码编译

2. 模板打包方法

步骤都是基于 Github 仓库中的代码来做示例

2.1 创建要打包的项目 WpfMudBlazor

这一步没什么好说的,想做什么样子的模板,就码怎样的代码即可。

2.2 替换模板关键字 TemplateCode

该项目是 WpfMudBlazor 的副本。在项目中替换了关键字后,会导致无法编译,所以选择复制一份出来,方便以后升级。

在这个项目中,仅仅是将项目名称和解决方案替换成创建项目时用户输入的名称。(使用 $safeprojectname$ 关键字替换掉原有内容即可)

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

	<PropertyGroup>
<OutputType>WinExe</OutputType>
<TargetFramework>net8.0-windows</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
<UseWPF>true</UseWPF>
<RootNamespace>$safeprojectname$</RootNamespace>
</PropertyGroup> <ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.Components.WebView.Wpf" Version="8.0.6" />
</ItemGroup> <ItemGroup>
<ProjectReference Include="..\$safeprojectname$.Pages\$safeprojectname$.Pages.csproj" />
</ItemGroup> </Project>
namespace $safeprojectname$
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
InitializeBlazor();
}
}
}

VS提供了很多模板关键字,如果需要制作更复杂的模板,可以参考微软官方文档-模板参数

2.3 导出模板文件 TemplateOutput

  1. 用vs打开模板项目
  2. 项目 -> 导出模板
  3. 选择项目模板 -> 选择对应项目

    友情提醒:多项目模板时记得要分别导出每一个项目



  4. 将所有项目的模板放入同一级目录中并解压(导出项目模板为.zip文件)
  5. 在根目录中再新建一个*.vstemplate文件(该文件为所有项目的模板文件)





  6. 编辑新建的.vstemplate模板文件
    • 根据自己的需求配置模板的项目说明
    • 注意ProjectCollection节点中子项目的引用路径
<VSTemplate Version="3.0.0" Type="ProjectGroup"
xmlns="http://schemas.microsoft.com/developer/vstemplate/2005">
<TemplateData>
<Name>WPF MudBlazor (.NET 8)</Name>
<Description>一个用来创建 .NET 8 + WPF + MudBlazor 的项目模板</Description>
<ProjectType>CSharp</ProjectType>
<PlatformTag>C#</PlatformTag>
<PlatformTag>WPF</PlatformTag>
<PlatformTag>MudBlazor</PlatformTag>
<PlatformTag>桌面</PlatformTag>
<PlatformTag>混合开发</PlatformTag>
<DefaultName>WpfMudBlazor</DefaultName>
<Icon>icon.ico</Icon>
</TemplateData>
<TemplateContent>
<ProjectCollection>
<ProjectTemplateLink ProjectName="$safeprojectname$" CopyParameters="true">
WpfMudBlazor\MyTemplate.vstemplate
</ProjectTemplateLink>
<ProjectTemplateLink ProjectName="$safeprojectname$.Pages" CopyParameters="true">
WpfMudBlazor.Pages\MyTemplate.vstemplate
</ProjectTemplateLink>
</ProjectCollection>
</TemplateContent>
</VSTemplate>
  1. 编辑所有子项目的.vstemplate模板文件,在TemplateData节点加入<Hidden>true</Hidden>

    这个设置是为了最终导入模板后,所有的子项目不会显示在vs的项目模板位置
  <TemplateData>
<!-- 为了节约空间,不显示文件中的其它原始配置 -->
<Hidden>true</Hidden>
</TemplateData>
  1. 将当前文件夹的所有内容打包成新的模板文件*.zip

将这个模板文件直接复制到第3步中vs默认模板路径下,重启vs,新建项目,你会发现模板已经生效。

后续步骤为将模板文件打包成VSIX扩展安装文件(非必须)

2.4 打包扩展 WpfMudBlazorTemplate

该步骤需要在 VS 中额外安装“Visual Studio 扩展开发”组件

  1. 创建一个新的“空白 VSIX 项目”

  2. 将上一节中的模板文件复制到当前项目中,并且选择始终复制
  3. 双击项目中的source.extension.vsixmanifest文件来编辑扩展信息
  • 元数据 Metadata -> 根据自己需求填写

  • 资产文件 Assets -> 新建

  • 其它几个选项为扩展的最低运行环境等等,看一眼差不多也能看懂个七七八八,按需配置即可
  1. 编译并生成项目,搞定(.VSIX文件在生成目录)

单项目模板的生成就更简单了,上述步骤只减不增

一个 WPF + MudBlazor 的项目模板(附:多项目模板制作方法)的更多相关文章

  1. WPF入门教程系列(一) 创建你的第一个WPF项目

    WPF入门教程系列(一) 创建你的第一个WPF项目 WPF基础知识 快速学习绝不是从零学起的,良好的基础是快速入手的关键,下面先为大家摞列以下自己总结的学习WPF的几点基础知识: 1) C#基础语法知 ...

  2. 演练:我的第一个 WPF 桌面应用程序 https://docs.microsoft.com/zh-cn/dotnet/framework/wpf/getting-started/walkthrough-my-first-wpf-desktop-application

    这篇文章演示如何开发简单的 Windows Presentation Foundation (WPF) 应用程序包括元素所共有的大多数 WPF 应用程序: 可扩展应用程序标记语言 (XAML) 标记. ...

  3. 【WPF学习】第六十一章 组织模板资源

    为表达全国各族人民对抗击新冠肺炎疫情斗争牺牲烈士和逝世同胞的深切哀悼,国务院今天发布公告,决定2020年4月4日举行全国性哀悼活动. 当使用控件模板时,需要决定如何更广泛地共享模板,以及是否希望自动地 ...

  4. 搭建QQ聊天通信的程序:(1)基于 networkcomms.net 创建一个WPF聊天客户端服务器应用程序 (1)

    搭建QQ聊天通信的程序:(1)基于 networkcomms.net 创建一个WPF聊天客户端服务器应用程序 原文地址(英文):http://www.networkcomms.net/creating ...

  5. 《Programming WPF》翻译 第5章 5.数据模板和样式

    原文:<Programming WPF>翻译 第5章 5.数据模板和样式 让我们想象一下我们想要实现TTT更有娱乐性的一个版本(这是大部分游戏中最重要的特色).例如,TTT的一种变体允许玩 ...

  6. WPF笔记(1.9 样式和控件模板)——Hello,WPF!

    原文:WPF笔记(1.9 样式和控件模板)--Hello,WPF! 资源的另一个用途是样式设置: <Window >  <Window.Resources>    <St ...

  7. 意外地解决了一个WPF布局问题

    原文:意外地解决了一个WPF布局问题 今天做了一个小测试,意外地将之前的一个困扰解决了,原问题见<WPF疑难杂症会诊>中的“怎么才能禁止内容撑大容器?” 以前我是在外侧嵌套Canvas容器 ...

  8. ImageSharp一个专注于NetCore平台图像处理的开源项目

    今天大家分享的是一个专注于NetCore平台图像处理的开源项目,老实说为这篇文章取名字想了5分钟,可能是词穷亦或是想更好的表达出这款开源项目的作用:这个项目在图像处理方面有很多功能,如:缩放,裁剪,绘 ...

  9. 【MEF】构建一个WPF版的ERP系统

    原文:[MEF]构建一个WPF版的ERP系统 引言 MEF是微软的一个扩展性框架,遵循某种约定将各个部件组合起来.而ERP系统的一大特点是模块化,它们两者的相性很好,用MEF构建一个ERP系统是相当合 ...

  10. 【Asp.net入门03】第一个ASP.NET 应用程序-创建ASP.NET项目

    本部分主要内容: 创建并运行Asp.net项目 web窗体 数据模型 调用代码隐藏方法 数据验证 1.操作步骤 第一步:启动Visual Studio 2013,然后从File(文件)菜单中选择New ...

随机推荐

  1. Eight HDU - 1043 (反向搜索 + 康拓展开 / A* + BFS / IDA* )

    题目描述 简单介绍一下八数码问题: 在一个3×3的九宫格上,填有1~8八个数字,空余一个位置,例如下图: 1 2 3 4 5 6 7 8 在上图中,由于右下角位置是空的,你可以移动数字,比如可以将数字 ...

  2. 使用 Python 参与算法竞赛

    引言 众所周知,打算法竞赛最频繁使用的语言是 C++.然而,对于那些不卡复杂度的题目,可以考虑使用 Python 编写(因为 Python 真的好写). 本文将简单地介绍一些 Python 使用技巧和 ...

  3. Kite 使用教程 轻量级代码提示

    概述 今天看小甲鱼视频的VSC Python 安装教程里视频博主强烈推荐安装Kite插件 ,这是什么玩意? 下载下来试一试? 原来:就是一个代码提示插件.. 说白了" 就是让开发者 在轻量级 ...

  4. <vue 组件 2、组件参数传递>

    代码结构 一.     01-父组件向子组件传递数据 1. 效果 展示出来的数据都是父组件传给子组件的数据 2.代码 01-父组件向子组件传递数据.html <!DOCTYPE html> ...

  5. Springboot+ELK实现日志系统简单搭建

    前面简单介绍了ELK三剑客中的其中两个Elasticsearch和Kibana的简单使用,如果对这两个不了解,可以看下下面的 Centos7安装Elasticsearch和Kibana 搜索引擎基础- ...

  6. Element 动态表头渲染表格

    element 中的table表头动态渲染 https://blog.csdn.net/heixiuheixiu666/article/details/104705024/ Element 动态表头渲 ...

  7. fusionpbx简介

    概述 fusionpbx是以freeswitch作为底层框架开发而成的开源PBX,在freeswitch的基础上,优化了GUI的易用性. fusionpbx可用作高可用性的单租户或基于域的多租户 PB ...

  8. java进阶(13)--int、String、Integer互相转换

    一.转换流程图  

  9. C# WPF:快把文件从桌面拖进我的窗体来!

    首发公众号:Dotnet9 作者:沙漠之尽头的狼 日期:202-11-27 一.本文开始之前 上传文件时,一般是提供一个上传按钮,点击上传,弹出文件(或者目录选择对话框),选择文件(或者目录)后,从对 ...

  10. [转帖]/dev/random 和 /dev/urandom的一点备忘

    https://www.cnblogs.com/ohmygirl/p/random.html 1.  基本介绍 /dev/random和/dev/urandom是Linux系统中提供的随机伪设备,这两 ...