一个 WPF + MudBlazor 的项目模板(附:多项目模板制作方法)
最近做了几个
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
- 用vs打开模板项目
- 项目 -> 导出模板
- 选择项目模板 -> 选择对应项目
友情提醒:多项目模板时记得要分别导出每一个项目


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



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

将这个模板文件直接复制到第3步中vs默认模板路径下,重启vs,新建项目,你会发现模板已经生效。
后续步骤为将模板文件打包成VSIX扩展安装文件(非必须)
2.4 打包扩展 WpfMudBlazorTemplate
该步骤需要在 VS 中额外安装“Visual Studio 扩展开发”组件
- 创建一个新的“空白 VSIX 项目”

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

- 资产文件
Assets-> 新建

- 其它几个选项为扩展的最低运行环境等等,看一眼差不多也能看懂个七七八八,按需配置即可
- 编译并生成项目,搞定(
.VSIX文件在生成目录)
单项目模板的生成就更简单了,上述步骤只减不增
一个 WPF + MudBlazor 的项目模板(附:多项目模板制作方法)的更多相关文章
- WPF入门教程系列(一) 创建你的第一个WPF项目
WPF入门教程系列(一) 创建你的第一个WPF项目 WPF基础知识 快速学习绝不是从零学起的,良好的基础是快速入手的关键,下面先为大家摞列以下自己总结的学习WPF的几点基础知识: 1) C#基础语法知 ...
- 演练:我的第一个 WPF 桌面应用程序 https://docs.microsoft.com/zh-cn/dotnet/framework/wpf/getting-started/walkthrough-my-first-wpf-desktop-application
这篇文章演示如何开发简单的 Windows Presentation Foundation (WPF) 应用程序包括元素所共有的大多数 WPF 应用程序: 可扩展应用程序标记语言 (XAML) 标记. ...
- 【WPF学习】第六十一章 组织模板资源
为表达全国各族人民对抗击新冠肺炎疫情斗争牺牲烈士和逝世同胞的深切哀悼,国务院今天发布公告,决定2020年4月4日举行全国性哀悼活动. 当使用控件模板时,需要决定如何更广泛地共享模板,以及是否希望自动地 ...
- 搭建QQ聊天通信的程序:(1)基于 networkcomms.net 创建一个WPF聊天客户端服务器应用程序 (1)
搭建QQ聊天通信的程序:(1)基于 networkcomms.net 创建一个WPF聊天客户端服务器应用程序 原文地址(英文):http://www.networkcomms.net/creating ...
- 《Programming WPF》翻译 第5章 5.数据模板和样式
原文:<Programming WPF>翻译 第5章 5.数据模板和样式 让我们想象一下我们想要实现TTT更有娱乐性的一个版本(这是大部分游戏中最重要的特色).例如,TTT的一种变体允许玩 ...
- WPF笔记(1.9 样式和控件模板)——Hello,WPF!
原文:WPF笔记(1.9 样式和控件模板)--Hello,WPF! 资源的另一个用途是样式设置: <Window > <Window.Resources> <St ...
- 意外地解决了一个WPF布局问题
原文:意外地解决了一个WPF布局问题 今天做了一个小测试,意外地将之前的一个困扰解决了,原问题见<WPF疑难杂症会诊>中的“怎么才能禁止内容撑大容器?” 以前我是在外侧嵌套Canvas容器 ...
- ImageSharp一个专注于NetCore平台图像处理的开源项目
今天大家分享的是一个专注于NetCore平台图像处理的开源项目,老实说为这篇文章取名字想了5分钟,可能是词穷亦或是想更好的表达出这款开源项目的作用:这个项目在图像处理方面有很多功能,如:缩放,裁剪,绘 ...
- 【MEF】构建一个WPF版的ERP系统
原文:[MEF]构建一个WPF版的ERP系统 引言 MEF是微软的一个扩展性框架,遵循某种约定将各个部件组合起来.而ERP系统的一大特点是模块化,它们两者的相性很好,用MEF构建一个ERP系统是相当合 ...
- 【Asp.net入门03】第一个ASP.NET 应用程序-创建ASP.NET项目
本部分主要内容: 创建并运行Asp.net项目 web窗体 数据模型 调用代码隐藏方法 数据验证 1.操作步骤 第一步:启动Visual Studio 2013,然后从File(文件)菜单中选择New ...
随机推荐
- HDU 1179:Ollivanders: Makers of Fine Wands since 382 BC.
HDU - 1179 二分图介绍:匈牙利算法 模板二分图: #include<bits/stdc++.h> using namespace std; const int maxn = 11 ...
- 【每日一题】29.maze (BFS 进阶)
补题链接:Here 本题代码由贺佬完成 这道题基本算一道 BFS 进阶题,有少许细节要小心 (WA1发.. #include <bits/stdc++.h> #define x first ...
- 将Sublime Text打造为轻量级的C++ IDE
本文较为详细地介绍了在Windows系统下,如何配置Sublime Text的C++编译运行环境.目前实现了了可以在Sublime Text按下快捷键后,调出CMD或者终端来运行C/C++程序,从而解 ...
- NSSCTF Round#13 web专项
rank:3 flask?jwt? 简单的注册个账号,在/changePassword 下查看页面源代码发现密钥<!-- secretkey: th3f1askisfunny --> ,很 ...
- C语言基础之理论概述
C语言介绍 C语言是一种高级程序设计语言,由贝尔实验室的Dennis Ritchie在1972年开发.C语言是结构化编程语言,支持变量.数据类型.运算符.表达式.流程控制语句和函数等基本程序设计元素. ...
- zookeeper分布式锁原理及使用 curator 实现分布式锁
本文为博主原创,未经允许不得转载: 1. zookeeper 分布式锁应用场景及特点分析 2. zookeeper 分布式原理 3. curator 实现分布式锁 1. zookeeper 分布式锁: ...
- SD Host控制器的系统集成
控制器集成需求 SD Host可以从外部读取数据存储到SRAM和eFlash或者可以从内部读取数据输出到外部存储 AHB Bus slave接口用于配置 master接口作为主设备,DMA可以控制总线 ...
- JMS微服务开发示例(三)使用分布式锁和编写定时任务
分布式锁 在Controller当中,提供了分布式锁的功能,代码如下: class HelloworldController : MicroServiceControllerBase { static ...
- [转帖]Redhat 8 磁盘调度策略变化:NOOP改为NONE
说明 在 redhat 4/5/6/7版本中的NOOP调度策略,从8开始修改为NONE,官方解释: none Implements a first-in first-out (FIFO) schedu ...
- [转帖]nacos discovery和config
微服务和nacos版本都在2.x及之后. 1.discovery用于服务注册,将想要注册的服务注册到nacos中,被naocs发现. pom引入的依赖是: yml配置文件中: 2.config用于获取 ...