将ASP.NET Core与旧版.Net Framework代码混合

史蒂夫·查德伯恩

我有一些旧的.NET代码,我想使用API​​进行包装。

该代码是ASP.NET Webforms和.NET Framework 4.0的混合体

我希望使用新的ASP.NET Core Web API,并基于此框架创建了一个新的解决方案,并将旧代码添加为现有项目。

一切正常,但是当我尝试调用一些旧代码时,出现以下错误:

发生System.TypeInitializationException HResult = 0x80131534
Message =“ TreeManager”的类型初始值设定项引发了异常。
来源=

内部异常1:FileNotFoundException:无法加载文件或程序集'System.Web.Extensions,版本= 4.0.0.0,区域性=中性,PublicKeyToken = 31bf3856ad364e35'。该系统找不到指定的文件。

这是我调用的代码:

TreeManager.LoadEvent += LoadTree;

public class TreeManager
{
    ...
    public static event EventHandler<LoadEventArgs> LoadEvent;
    ...
}

我尝试将旧版代码更新为.NET 4.5.2,但收到相同的错误。

我使用ASP.NET MVC 4 API 2用API封装了旧代码,并且一切正常。

是否可以这样做,如果可以,我需要进行哪些更改?

克里斯·普拉特

首先,您可以选择使用ASP.NET Core应用程序定位.NET Core或完整框架。仅仅因为它是“ Core”并不意味着您必须使用.NET Core。如果您使用的是旧版API,则可能会被迫在完整框架上运行。

如果您需要或只是想使用.NET Core,以便可以在Windows环境之外部署该应用程序,那么您将需要将不支持的所有API迁移到其他API,或者如果没有其他API,则可能会重写功能存在。

.NET Core 2.0支持.NET Standard 2.0,该API具有非常大的API占用空间。因此,Microsoft开放了与旧版.NET Framework库和包的兼容性。但是,不能保证您可以充分利用这些库和软件包。仅仅因为您可以添加依赖关系并不意味着您可以利用所有API。这可能是您在这里遇到的问题。这组特定的API依赖于System.Web,它不是.NET Core的一部分。

最近,Microsoft发布了一些工具来简化此类迁移方案。首先,有一个.NET API Analyzer,一个NuGet软件包,它将为与各种目标不兼容的API调用添加Intellisense标注。这将帮助您查找需要更改的代码,并在编写新代码时提醒您,您需要以不同于以往的方式进行操作。

其次,还有适用于.NET CoreWindows兼容性包,这是另一个NuGet程序包,该程序包支持整个框架中的许多较旧的仅Windows API。这样可以在迁移过程中为您提供一些喘息的空间,从而在需要更改的情况下有所减少。但是,仍然鼓励您最终也关闭此代码,最终使应用程序完全脱离依赖项。

最后,如果以上方法均无济于事,您可能只需要寻找替代方法即可。这可能需要安装第三方NuGet并重写一些代码以使用该代码,而不是以前使用的代码。

没有人声称迁移是一件容易的事。这总是一场艰苦的战斗。如果您现在没有足够的带宽执行此操作,则只需将整个框架作为目标,然后将其命名为一天。否则,请尽最大努力进行挖掘和解决。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

.NET Core与ASP.NET Core

使用将net461设置为唯一框架的ASP.NET Core Web应用程序(.NET Core)与使用(.NET Framework)模板之间的区别

为什么将完整的.NET Framework与ASP.NET Core一起使用?

创建项目ASP.NET Core(.NET Core)和ASP.NET Core(.NET Framework)有什么区别

ASP.NET Web应用程序(.NET Framework)与ASP.NET Core Web应用程序(.NET Framework)

ASP.NET CORE(.NET Framework)和本地化

将完整的.NET Framework与现有的ASP.NET Core项目一起使用

带有MSBuild的混合DotNet Core / .NET Framework构建

在Asp.Net Core中使用旧版用户表进行自定义身份验证

将ASP.NET Core 1.1升级到ASP.NET Core 2.0

完整.NET Framework上的ASP.NET Core 2.1

在Teamcity上构建混合解决方案(.NET Framework和.NET Core)时找不到包

ASP.NET Core Identity 2.0-将401状态代码返回给ajax函数

将ASP.NET Core应用程序的目标框架从.NET Framework 4.7.2更改为.NET Core 2.2

将现有的ASP.NET Core Web应用程序更改为目标.NET Framework 4.x

将ASP.NET Core与.NET Framework进行集成测试-找不到deps.json

将.net Framework项目与.net Core项目(和语言)混合-System.IO.FileNotFoundException

使用ADFS的JWT承载身份验证将ASP.NET Framework迁移到ASP.NET Core 3.1

将.NET Framework VB项目转换为.NET Core

创建使用旧版MachineKey的.NET Core DataProtectionProvider

ASP.NET将.NET Framework 4.0更改为3.5

混合html和代码asp.net

.NET Framework(CLR)支持ASP.NET Core哪些.NET Framework版本

ASP.NET Core 2.0 Razor + Angular 4 混合

如何将 MVC 中的动态绑定代码从 .NET Framework 迁移到 .NET Core?

混合使用 .NET Framework 和 .NET CORE 有什么问题?

将 Mapster 映射代码放在 EF Core 3 和 ASP.Net MVC Core 的何处?

配置服务时出错 - 将 Entity Framework Core 添加到 ASP.NET Core

将 ASP.NET Core 3.1 迁移到 .NET 5.0