微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

asp.net-mvc-4 – 将ASP.NET Core与旧版.Net Framework代码混合使用

我有一些遗留的.NET代码,我想用API包装.

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

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

一切都建立好但是当我尝试调用一些遗留代码时,我收到以下错误

System.TypeInitializationException occurred HResult=0x80131534
Message=The type initializer for ‘TreeManager’ threw an exception.
Source=

Inner Exception 1: FileNotFoundException: Could not load file or
assembly ‘System.Web.Extensions,Version=4.0.0.0,Culture=neutral,
PublicKeyToken=31bf3856ad364e35’. The system cannot find the file
specified.

这是我调用代码

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或完整框架.仅仅因为它的“核心”并不意味着你必须使用.NET Core.如果您正在使用旧版API,则可能会被迫在完整框架上运行.

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

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

最近,微软发布了一些工具,使这样的迁移方案更容易.首先是.NET API Analyzer,这是一个NuGet包,它会将Intellisense标注添加到与各种目标不兼容的API调用中.这将帮助您跟踪需要更改的代码,并在您编写新代码时提醒您,您需要以与以往不同的方式执行操作.

其次,还有Windows Compatibility Pack for .NET Core,另一个NuGet软件包支持完整框架中许多较旧的Windows专用API.这可以在您的迁移过程中为您提供一些喘息的空间,如果您需要更改某些内容,请稍微减少一些.尽管如此,我们仍然鼓励您最终切换出此代码,最终将应用程序完全脱离依赖关系.

最后,如果这些都没有帮助,您可能只需要找到替代方案.这可能需要安装第三方NuGet并重写一些代码以使用它而不是之前使用的代码.

没有人声称迁移很容易;这总是一场艰苦的战斗.如果您现在没有足够的带宽,只需定位完整框架并将其称为一天.否则,尽可能地挖掘并解决它.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐