将 ASP.NET 核心与较旧的 .Net Framework 代码混合
Mixing ASP.NET Core with older .Net Framework code
我有一些遗留的 .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 或完整框架。仅仅因为它是 "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
,它不是 .NET Core 的一部分。
最近,Microsoft 发布了一些工具来简化此类迁移方案。首先,有 .NET API Analyzer,一个 NuGet 包,它将向 API 调用添加 Intellisense 标注,这些调用与各种目标不兼容。这将帮助您追踪需要更改的代码,并在您编写新代码时提醒您,您需要以不同于以往的方式做事。
其次,还有 Windows Compatibility Pack for .NET Core,另一个 NuGet 包,它支持来自完整框架的许多旧 Windows-only APIs。这可以在迁移过程中为您提供一些喘息的空间,如果您需要更改某些内容,则可以减少数量。尽管如此,我们仍然鼓励您最终也关闭此代码,最终使您的应用程序完全脱离依赖关系。
最后,如果 none 有帮助,您可能只需要找到一个替代方案。这可能需要安装第三方 NuGet 并重写一些代码以使用它而不是你之前使用的代码。
从来没有人声称迁移很容易;这总是一场艰苦的战斗。如果您现在没有足够的带宽来完成它,只需瞄准完整的框架并结束它。否则,请深入挖掘并尽可能地解决它。
我有一些遗留的 .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 或完整框架。仅仅因为它是 "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
,它不是 .NET Core 的一部分。
最近,Microsoft 发布了一些工具来简化此类迁移方案。首先,有 .NET API Analyzer,一个 NuGet 包,它将向 API 调用添加 Intellisense 标注,这些调用与各种目标不兼容。这将帮助您追踪需要更改的代码,并在您编写新代码时提醒您,您需要以不同于以往的方式做事。
其次,还有 Windows Compatibility Pack for .NET Core,另一个 NuGet 包,它支持来自完整框架的许多旧 Windows-only APIs。这可以在迁移过程中为您提供一些喘息的空间,如果您需要更改某些内容,则可以减少数量。尽管如此,我们仍然鼓励您最终也关闭此代码,最终使您的应用程序完全脱离依赖关系。
最后,如果 none 有帮助,您可能只需要找到一个替代方案。这可能需要安装第三方 NuGet 并重写一些代码以使用它而不是你之前使用的代码。
从来没有人声称迁移很容易;这总是一场艰苦的战斗。如果您现在没有足够的带宽来完成它,只需瞄准完整的框架并结束它。否则,请深入挖掘并尽可能地解决它。