如何修改EnvDTE生成的控制台应用的.NET版本为.NET 6.0
解决方案
你生成的项目默认是.NET Framework 4.0的原因和运行EnvDTE的项目框架版本无关,是你复制的模板本身就是Visual Studio内置的.NET Framework控制台模板,默认输出就是Framework版本。以下是两种可行的实现方案:
方案1:修改自制模板(推荐,一劳永逸)
直接调整你本地的模板文件,后续生成的所有项目都会默认是net6.0版本,操作步骤如下:
- 进入你存放自制模板的
C:\Users\Logix\Desktop\TEMPLATE目录 - 替换目录下的
.csproj文件内容为SDK风格的net6.0控制台项目配置:
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <OutputType>Exe</OutputType> <TargetFramework>net6.0</TargetFramework> <ImplicitUsings>enable</ImplicitUsings> <Nullable>enable</Nullable> </PropertyGroup> </Project>
- 删掉模板目录下多余的
Properties\AssemblyInfo.cs、app.config文件,SDK风格项目会自动生成程序集相关属性,不需要这些冗余文件 - 打开
.vstemplate文件,找到<TemplateContent>节点下的Project条目,删掉其中和TargetFrameworkMoniker相关的属性配置,避免模板强制指定Framework版本 - 保存所有修改后,重新运行你的EnvDTE代码即可生成net6.0版本的项目
方案2:通过EnvDTE代码动态调整
如果你不想修改模板,可以在项目生成后通过代码直接修改框架版本,在你的AddFromTemplate执行后添加如下逻辑即可:
// 获取刚生成的项目实例 Project newProject = solution.Projects.Item(1); string csprojPath = newProject.FullName; // 重写csproj文件为net6.0配置 string csprojContent = @"<Project Sdk=""Microsoft.NET.Sdk""> <PropertyGroup> <OutputType>Exe</OutputType> <TargetFramework>net6.0</TargetFramework> <ImplicitUsings>enable</ImplicitUsings> <Nullable>enable</Nullable> </PropertyGroup> </Project>"; File.WriteAllText(csprojPath, csprojContent); // 重新加载项目使配置生效 newProject.Reload();
如果需要保留原有模板的其他配置项,也可以读取原csproj内容,替换对应的TargetFramework节点即可。
内容的提问来源于stack exchange,提问作者Logix
相关产品推荐
相关产品推荐

