.NET Core + .NET 4 в процессе параллельного выполнения?

При работе в Windows поддерживает ли процесс .NET Core параллельное выполнение .NET 4, как описано здесь: https://docs.microsoft.com/en-us/dotnet/framework/deployment/in-process-side-by-side-execution< /а>

Спасибо


person David Hardin    schedule 27.02.2020    source источник


Ответы (1)


Если вы ищете бок о бок в соответствии с указанными документами:

Установка новой версии .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) по-прежнему возможна.

person weichch    schedule 07.04.2020