。NET Core + .NET 4在并行执行过程中?

问题描述 投票:6回答:1

在Windows上运行,如以下所述,在.NET 4的并行执行中是否支持.NET Core进程:https://docs.microsoft.com/en-us/dotnet/framework/deployment/in-process-side-by-side-execution

谢谢

.net-core asp.net-core-2.1 side-by-side
1个回答
2
投票

如果您根据参考文档寻求“并排”:

安装新版本的.NET Framework对现有应用程序没有影响。

应用程序针对所构建的.NET Framework版本运行。除非明确指示,否则他们不会使用.NET Framework的新版本。但是,应用程序更容易过渡到使用新版本的.NET Framework。

然后答案是

。NET Core是一个独立的框架,而不是.NET Framework的升级。因此,出于上述原因,在一个进程中并排运行两个DLL是不相关的。

是否可以在同一过程中承载一个.NET Framework DLL和一个.NET Core DLL?

我已经看到两种可能的方式:

w3wp.exe

[使用in-process hostingit is possible to load both CLR and CoreCLR into w3wp.exe时,但是我不知道这是如何工作的。它应该是在托管代码领域之外的低级别/运行时级别的事物。

DLL参考

。NET Core应用程序可以直接引用.NET Framework库,只要定位为w3wp.exe。例如NET45 +。

但是,.NET Framework代码在.NET Core外壳程序中时的性能与在.NET Framework Shell中的代码不同。

考虑此代码:

.NET Framework version implements .NET Standard

如果在.NET Core应用程序中引用此类型,则可能会看到// In .NET Framework library public class Class1 { public void Test() { var domain = AppDomain.CreateDomain("mydomain"); Console.WriteLine(domain); } } ,但没有编译时错误:

warning

运行代码时,您将获得异常:

static void Main(string[] args)
{
    var class1 = new Class1();
    class1.Test();
}

相反,在.NET Framework Shell中运行代码时,看到的是正常输出:

System.PlatformNotSupportedException: 'Secondary AppDomains are not supported on this platform.'

为什么?

这是因为Name:mydomain There are no context policies. 被类型转发到不同的运行时库。

如果打印出该类型所驻留的程序集:

AppDomain

您可以看到.NET Core,输出为:

Console.WriteLine(typeof(AppDomain).Assembly);

对于.NET Framework,输出为:

System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e

两者之间可以进行什么样的交流?

例如,我可以发送序列化的对象吗?两个AppDomain如何通信类似?

根据mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 ,. NET Core不支持应用程序域和远程处理,因此您不能基于这些技术进行跨域通信。

如果查看.NET Core中this docs的实现,它只会引发异常。

但是,仍然可以进行基于网络的通信(例如MarshalByRefObject

© www.soinside.com 2019 - 2024. All rights reserved.