升级Windows11后Visual Studio无法创建新Blazor模板项目
问题原因分析
报错路径TemplateName.zip$safeprojectname$.csproj表明Visual Studio在解析模板时,尝试在模板压缩包中寻找名为$safeprojectname$.csproj的文件,但实际你的模板包中并不存在该文件——这是因为你修改MyTemplate.vstemplate时,将File属性也替换成了变量,而Windows11升级后VS的模板解析逻辑变得更严格,不再允许这种“实际文件与配置路径不匹配”的情况(此前Windows10下VS可能有兼容处理)。
解决步骤
1. 修正vstemplate配置
将MyTemplate.vstemplate中的Project节点改回实际存在的模板文件名,仅保留TargetFileName为变量:
<Project TargetFileName="$safeprojectname$.csproj" File="BZ1Template4.0.csproj" ReplaceParameters="true">
这样VS会将模板中真实存在的BZ1Template4.0.csproj文件复制并重命名为$safeprojectname$.csproj,同时自动替换文件内的参数。
2. 确保模板文件内的参数替换
打开模板中的BZ1Template4.0.csproj文件,将所有硬编码的项目名称、命名空间等内容替换为$safeprojectname$,比如:
<AssemblyName>$safeprojectname$</AssemblyName> <RootNamespace>$safeprojectname$</RootNamespace>
3. 清理VS模板缓存
删除VS的项目模板缓存文件夹:
C:\Users\ME\AppData\Roaming\Microsoft\VisualStudio\17.0_4cb345df\ProjectTemplateCache
重启Visual Studio,让它重新加载并解析你的自定义模板。
4. 验证模板权限
右键以管理员身份运行Visual Studio,尝试创建项目——Windows11的权限管控更严格,确保VS拥有读写AppData模板目录的权限。
备选方案(若上述步骤无效)
重新导出模板时,先将原Blazor项目的csproj文件名改为safeprojectname.csproj,再导出模板。此时无需修改vstemplate的File属性,VS会直接识别变量并完成命名替换。
内容的提问来源于stack exchange,提问作者ExecChef

