При работе в Windows поддерживает ли процесс .NET Core параллельное выполнение .NET 4, как описано здесь: https://docs.microsoft.com/en-us/dotnet/framework/deployment/in-process-side-by-side-execution< /а>
Спасибо
При работе в Windows поддерживает ли процесс .NET Core параллельное выполнение .NET 4, как описано здесь: 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 в одном процессе по вышеуказанным причинам не имеет значения.
Есть ли способ разместить одну библиотеку DLL .NET Framework и одну библиотеку DLL .NET Core в одном процессе?
Да
Я видел два возможных пути:
w3wp.exe
При использовании в процессе хостинг, в w3wp.exe
можно загрузить как CLR, так и CoreCLR, но как это работает я не знаю. Это должен быть низкоуровневый уровень/уровень времени выполнения, который находится за пределами мира управляемого кода.
Справочник по DLL
Приложение .NET Core может напрямую ссылаться на библиотеку .NET Framework, если целевое значение Версия .NET Framework реализует .NET Standard. например NET45+.
Однако код .NET Framework может работать иначе, когда он находится в оболочке .NET Core, чем в оболочке .NET Framework.
Рассмотрим этот код:
// In .NET Framework library
public class Class1
{
public void Test()
{
var domain = AppDomain.CreateDomain("mydomain");
Console.WriteLine(domain);
}
}
Если вы ссылаетесь на этот тип в приложении .NET Core, вы можете увидеть предупреждение, но нет ошибки времени компиляции:
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
в .NET Core выдает только исключения.
Однако связь по сети (например, gRPC) по-прежнему возможна.