vb如何配置Visual Studio 2022解决方案以将相同的代码编译到.NET 4.8和.NET 7



问题描述

我有一个基于的解决方案。NET Framework 4.8,它是一个用VB.NET编写、用VS2019构建并更新到VS2022的类库项目。

该项目非常繁重(为.NET开发人员提供了一个完整的工具集),有数千个类、数百万行代码等。

我想将此解决方案升级到。NET Core 7,但升级助手对此很痛苦,由于我遇到的所有编译器错误,我无法以这种方式完成。无论如何,我设法修剪了";非必需";来自升级助手生成的解决方案的代码,并修复所有编译器错误;核心";中代码的。NET 7。

然而,我发现这种变通方法也非常不可行,首先是因为它在基于的解决方案中缺少了很多代码和功能。NET FW 4.8,其次是因为我对基于的解决方案进行了更改和更新。NET FW 4.8,然后必须将这些更改和更新复制并适应。NET 7解决方案。这对一个人来说是一场噩梦。


结论

因此,我得出的结论是,最好的选择是在VS2002中从头开始创建/启动一个Visual Studio解决方案。NET 7解决方案的配置方式使得代码可以编译来构建。NET FW 4.8 dlls和。NET 7 dll;只是";我必须逐步复制和调整基于原始解决方案的代码。NET FW 4.8,以这个新的空解决方案使代码与兼容。NET FW 4.8和。NET 7。一旦我完成,我可以永远删除基于的解决方案。净FW 4.8。

我希望你在这一点上正确理解我。


问题

我在上面所暴露的问题是什么?。

好吧,主要的问题(除了我对.NET Core的经验很少之外)是我不太清楚如何做这种解决方案。或者如果可以的话。

也就是说,a。NET 7解决方案,具有单个类库项目,其配置用于编译要构建的代码。NET FW 4.8 dll在一个目录中,另一个配置编译相同的代码来构建相应的。NET 7 dll在另一个目录中。

从逻辑上讲,我认为我需要使用条件编译,这样不兼容的代码就不会编译来构建。NET 7 dll,但除此之外,我不太知道如何创建必要的解决方案配置。

我想这个问题可以概括如下:

如何配置Visual Studio 2022解决方案以将相同的代码编译到。NET 4.8和。NET 7

我需要指导、建议或例子来开始执行这项工作。

编辑:

我只是想要一个单身。NET 7解决方案,我可以在该解决方案上编译相同的代码来为生成dll。NET 4.8(可以在.NET Framework项目中导入)和的dll。NET 7(可以在.NET 7项目中导入),共享相同的代码(通过条件编译进行筛选),所有代码都在同一个代码中。NET 7项目/解决方案。

如何配置Visual Studio 2022解决方案以将相同的代码编译到。NET 4.8和。NET 7?

有两个主要选项,即多目标+条件编译,您已经(几乎)发现了这两个选项。我找不到VB的指导,但这里有C#的文档,也许他们可以给你一些指导:

  • 支持多个。项目文件中的.NET Framework版本
  • MSBuild多目标概述
  • SDK风格项目中的目标框架

可以考虑使用的第二个选项。NET标准:

。NET标准是的一个正式规范。NET API,可在多个。NET实现。背后的动机。NET标准是为了在。NET生态系统。NET 5和更高版本采用了一种不同的方法来建立一致性,从而消除了对的需要。NET标准。但是,如果您希望在之间共享代码。NET Framework和任何其他。NET实现,如。NET核心,您的库应该瞄准。NET标准2.0。没有的新版本。NET标准将会发布,但是。NET 5。NET 6以及所有未来版本都将继续支持。NET Standard 2.1及更早版本。

因此您可以将共享代码移动到。NET标准库(.NET Framework最新支持.NET Standard 2.0),两者都可以引用此库。NET(核心)和。NET Framework目标项目。尽管此选项并不适用于所有类型的库。NET标准API数量巨大,但仍然非常有限。

假设这是一个web表单应用程序,就不能真正做到这一点。

如果这是一个MVC应用程序,那么您可能可以转换并作为.NET Core运行,而不需要做任何更改。

所以,这里的第一个答案是,这个项目是一个web表单项目,还是一个MVC web项目?

所以,请记住,使用.NET Core的Web表单项目是零支持的。您现在不能使用或让Web窗体作为.NET Core运行,它们必须是.NET Framework,而不是.NET Core Framework。

如前所述,如果这是一个MVC项目,那么您可以使用.NET Core,几乎不需要更改代码,只有少数例外。

但是,如果这是Web表单,那么您就不能选择.NET Core或.NET Framework。(必须使用.NET Framework)

理论上,mvc项目可以基于.NET Core或.NET Framework,但根据您给定的信息,这看起来是一个webforms项目,而不是mvc项目,所以在这种情况下,不,您不能这样做。

所以,请记住MVC项目有很大的不同。.NET核心中的MVC项目和.NET核心中MVC项目之间的区别是什么?你可能分不清其中的区别。

然而,web表单与MVC项目?现在,这是一场完全不同的球赛和事情。如果不重新编写应用程序,Webform项目就无法转换为MVC项目。

如果这个项目已经是MVC项目了?然后我非常怀疑,如果您使用.NET Framework或.NET Core,是否会关心甚至注意到差异。您的代码将完全相同,.NET Core和.NET框架之间也很少有例外。

最新更新