Не могу вызвать / загрузить сборку .NET Core, но .NET Standard работает нормально, используя Add-Type в PowerShell - PullRequest
0 голосов
/ 23 февраля 2019

При попытке создать библиотеку классов .NET Core для PowerShell я вижу странные различия между .NET Standard и .NET Core.

Следуя этому руководству, ясоздал простую библиотеку классов .NET Standard 2.0 и смог успешно загрузить ее в PowerShell 5.1 и PowerShell 6.0.1, используя Add-Type -Path [path].

namespace Animal
{
    public class Dog
    {
        public string Bark()
        {
            return "Woof!";
        }
    }
}

. Я могу вызвать метод .Bark() и увидетьвывод в PowerShell 5.1 и PowerShell Core 6.0.1.

Когда я использую шаблон .NET Core 2.2 для создания одного класса, я не могу использовать его ни в одном экземпляре PowerShell.Код практически идентичен:

namespace AnimalCore
{
    public class Dog
    {
        public string Bark()
        {
            return "Woof!";
        }
    }
}

PowerShell 5.1:

Add-Type: невозможно загрузить один или несколько запрошенных типов.Получите свойство LoaderExceptions для получения дополнительной информации.

PowerShell Core 6.0.1

Невозможно найти тип [AnimalCore.Dog]

Iмог бы успешно использовать шаблон .NET Standard для сборки моей сборки, но мне интересно, в чем здесь разница и как можно скомпилировать эту библиотеку классов для использования в .NET Core?

1 Ответ

0 голосов
/ 23 февраля 2019

В обратном порядке:

как можно скомпилировать эту библиотеку классов для использования в .NET Core?

Для того, чтобы ваша библиотека использоваласьPowerShell Core пока что нацеливается на .NET Core версии 2.1 - 2.2 пока не поддерживается (хотя, насколько я понимаю, в следующем выпуске PowerShell Core 6.2 будет перенесен проект.NET Core 2.2).


Я с радостью мог бы использовать шаблон .NET Standard для сборки своей сборки, но мне интересно, в чем здесь разница

Как вы, возможно, знаете, между .NET Framework и .NET Core нет полного паритета функций - некоторые библиотеки базовых классов, которые поставляются с Windows, естественно, недоступны в .NET Core, а некоторые кросс-платформенные поддержки требуются в.NET Core приводит к тому, что некоторые API ведут себя не так, как в .NET Framework.

Решение этого пробела в мобильности называется .NET Standard - оно определяет большое подмножество API-интерфейсов, которые полностью перекрывают Framework и Core!

Таким образом, когда вы нацеливаетесь на netstandard2.0, а не netcoreapp2.2 или netcoreapp2.1, это способ гарантировать, что как .NET Framework , так и .NET Core могут ссылаться и использовать вашу библиотеку- именно поэтому вы обнаружите, что ваш код отлично работает как в PowerShell 5.1, так и в 6.0.1, если вы нацелены на .NET Standard

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...