Если вы ищете «бок о бок» в соответствии с указанными документами:
Установка новой версии. NET Framework не влияет на существующие приложения.
Приложения работают с версией. NET Framework, с которой они были созданы. Они не используют новую версию. NET Framework, если не указано иное. Однако приложениям проще перейти на использование новой версии. NET Framework.
Тогда ответ будет Нет .
. NET Core - это независимая платформа, а не обновление. NET Framework. Поэтому запускать обе библиотеки DLL в одном процессе параллельно по вышеуказанным причинам не имеет значения.
Есть ли способ разместить одну. NET Framework DLL и одну. NET Core DLL в том же процессе?
Да.
Я видел два вида возможных способов:
w3wp.exe
При использовании внутрипроцессного хостинга , возможно загрузить CLR и CoreCLR в w3wp.exe
, но как это работает, я не знаю , Это должна быть вещь низкого уровня / уровня времени выполнения, которая находится за пределами мира управляемого кода.
Ссылка на DLL
A. NET Базовое приложение может напрямую ссылаться на библиотеку. NET Framework до тех пор, пока нацеливается . NET Framework Версия реализует. NET Стандарт . например, NET45 +.
Однако код. NET Framework может работать по-разному, когда он в. NET Оболочка ядра, чем в. NET Оболочка Framework.
Учтите это код:
// In .NET Framework library
public class Class1
{
public void Test()
{
var domain = AppDomain.CreateDomain("mydomain");
Console.WriteLine(domain);
}
}
Если вы ссылаетесь на этот тип в базовом приложении. NET, вы можете увидеть предупреждение , но без ошибки времени компиляции:
static void Main(string[] args)
{
var class1 = new Class1();
class1.Test();
}
Когда вы запустите код, вы получите исключение:
System.PlatformNotSupportedException: 'Secondary AppDomains are not supported on this platform.'
И наоборот, когда вы запустите код в оболочке. NET Framework, вы увидите нормальный вывод:
Name:mydomain
There are no context policies.
Почему?
Это связано с тем, что AppDomain
является типом, перенаправленным в разные библиотеки времени выполнения.
Если вы распечатываете сборку, в которой находится тип:
Console.WriteLine(typeof(AppDomain).Assembly);
Вы можете видеть для. NET Core, вывод:
System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e
, тогда как для. NET Framework, вывод:
mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
какой тип связи между ними может быть?
можно ли, например, отправлять сериализованные объекты? Что-то похожее в том, как могут взаимодействовать два домена приложений?
Согласно этой документации , домены приложений и удаленное взаимодействие не поддерживаются. NET Core, поэтому вы не можете выполнять кросс -доменная связь, основанная на этих технологиях.
Если вы посмотрите на реализацию MarshalByRefObject
in. NET Core, то выдает только исключения.
Однако, сетевые коммуникации (такие как gPP C) все еще возможны.