vsix模板中对多个运行时.NET Core的交互式窗口支持

问题描述

在为VSIX创建模板时,我们可以允许用户选择.Net框架版本 就是这样的:

<TargetFrameworkVersion>v$targetframeworkversion$</TargetFrameworkVersion>

现在,随着新版本Visual Studio(16.8)的发布,用户还可以选择.NET Core版本。 但是此代码似乎在.NET Core模板项目中不起作用,并且显示了不同的数字,而不是netcoreapp3.1或net50-windows值。 .net核心也使用<TargetFramework>代替<TargetFrameworkVersion> 那么正确的参数是什么? 我测试了这些:

1.result = 4.5

<TargetFrameworkVersion>$targetframeworkversion$</TargetFrameworkVersion>

2.result = $ targetframework $

<TargetFramework>$targetframework$</TargetFramework>

3.result = 4.5

<TargetFramework>$targetframeworkversion$</TargetFramework>

解决方法

我认为您到目前为止无法为 Net Core 创建这样的vsix 项目模板

我认为您已经创建了项目模板项目来实现您的需求。

enter image description here

您应该注意,该项目模板使用的是旧的sdk样式格式,而不是新的sdk格式( Net Core )。此外,传入和传出的内容始终是Net Framework的框架。

因此,无论您如何在此模板的基础上更改其proj形式,它始终是net框架。您可以看到此界面,它是我创建的自定义模板,我将其更改为使用

<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,然后使用该模板,您可以看到以下内容:

enter image description here

始终以net frameowrk为目标。并证明了修改后的框架受项目模板项目本身内部参数的控制,我们无法更改此内部参数。

详细$targetframeworkversion$是项目模板本身的参数,并且由于项目模板是由Microsoft使用net framework发布的,因此该参数始终为{{1 }}和其他无法控制的行为也可能导致模板项目的损坏。因此,我们无法获得net framework

建议

作为建议,您应该通过DC Forumgithub与Microsoft团队联系,以使用新的sdk格式(Net Core格式)发布新的项目模板项目。