我有一些旧的.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 Core的Windows兼容性包,这是另一个NuGet程序包,该程序包支持整个框架中的许多较旧的仅Windows API。这样可以在迁移过程中为您提供一些喘息的空间,从而在需要更改的情况下有所减少。但是,仍然鼓励您最终也关闭此代码,最终使应用程序完全脱离依赖项。
最后,如果以上方法均无济于事,您可能只需要寻找替代方法即可。这可能需要安装第三方NuGet并重写一些代码以使用该代码,而不是以前使用的代码。
没有人声称迁移是一件容易的事。这总是一场艰苦的战斗。如果您现在没有足够的带宽执行此操作,则只需将整个框架作为目标,然后将其命名为一天。否则,请尽最大努力进行挖掘和解决。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句