c# - vsix 模板中对多个运行时 .NET Core 的交互式窗口支持
问题描述
在为 VSIX 创建模板时,我们可以允许用户选择 .Net 框架版本这是如何完成的:
<TargetFrameworkVersion>v$targetframeworkversion$</TargetFrameworkVersion>
现在,随着新版本 Visual Studio (16.8) 的发布,这也允许用户选择 .NET Core 版本。但此代码似乎在 .NET Core 模板项目中不起作用,并显示不同的数字而不是 netcoreapp3.1 或 net50-windows 值。也.net核心使用<TargetFramework>
而不是<TargetFrameworkVersion>
so正确的参数是什么?我测试了这些:
1.结果 = 4.5
<TargetFrameworkVersion>$targetframeworkversion$</TargetFrameworkVersion>
2.结果 = $targetframework$
<TargetFramework>$targetframework$</TargetFramework>
3.结果 = 4.5
<TargetFramework>$targetframeworkversion$</TargetFramework>
解决方案
我认为到目前为止您无法为Net Core创建这样的 vsix项目模板。
我认为您已经创建了项目模板项目来实现您的要求。
您应该注意,这个项目模板使用旧的 sdk 样式格式,而不是新的 sdk 格式(Net Core)。而且,它传入和传出的始终是 Net Framework
.
所以无论你如何proj
在这个模板的基础上改变它的形式,它永远都是net framework。可以看到这个界面,是我自己创建的自定义模板,我会改成使用
<Project Sdk="Microsoft.NET.Sdk">
....
<TargetFramework>$targetframeworkversion$</TargetFramework>
.....
</Project>
而且我还卸载了项目模板项目->编辑xxx.csproj
文件,更改为使用这些:
<Project Sdk="Microsoft.NET.Sdk">
....
<TargetFramework>netcoreapp3.1</TargetFramework>
.....
</Project>
构建项目模板并将其放入C:\Users\xxx\Documents\Visual Studio 2019\Templates\ProjectTemplates
.
重新启动 VS,然后使用该模板,您可以看到:
它始终以net frameowrk
. 并且证明修改后的框架是由项目模板项目本身的内参控制的,我们不能改变这个内参。
详细来说,$targetframeworkversion$
是来自项目模板本身的参数,而且由于项目模板是微软用 发布的net framework
,所以参数一直是net framework
,其他不可控的行为也会导致模板项目的损坏。所以我们无法做到这Net Core
一点。
建议
作为建议,您应该在DC 论坛或github上与 Microsoft 团队联系,以发布具有新 sdk 格式(Net Core 格式)的新项目模板项目。
推荐阅读
- swift - 快速将字符串转换为可执行代码
- github-actions - 是否可以在 Github Action 的名称中包含版本号?
- php - Foreach 等待
- compression - AWS Amplify 部署 - 使用压缩
- android - 优化 Android 中 Mapbox Navigation SDK 的电池使用情况
- c# - 检查设备是否在 Xamarin iOS 中具有本地身份验证
- css - SASS 字符串到“非字符串”
- c - 返回指向 char* 的指针会破坏数据
- java - com.mongodb.MongoSocketException: No such host is known
- python - 如何在 Pandas 中为数据框重置行的值?