首页 > 解决方案 > 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>

标签: c#visual-studiovisual-studio-extensionsvsixtarget-framework

解决方案


我认为到目前为止您无法为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 格式)的新项目模板项目。


推荐阅读