在Windows上运行,如以下所述,在.NET 4的并行执行中是否支持.NET Core进程:https://docs.microsoft.com/en-us/dotnet/framework/deployment/in-process-side-by-side-execution
谢谢
如果您根据参考文档寻求“并排”:
安装新版本的.NET Framework对现有应用程序没有影响。
应用程序针对所构建的.NET Framework版本运行。除非明确指示,否则他们不会使用.NET Framework的新版本。但是,应用程序更容易过渡到使用新版本的.NET Framework。
然后答案是否。
。NET Core是一个独立的框架,而不是.NET Framework的升级。因此,出于上述原因,在一个进程中并排运行两个DLL是不相关的。
是否可以在同一过程中承载一个.NET Framework DLL和一个.NET Core DLL?
是
我已经看到两种可能的方式:
w3wp.exe
[使用in-process hosting,it 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
。