Как создать библиотеку классов с интерфейсом (ами) и / или методами, используемыми в Windows и / или PowerShell?

здесь находится фрагмент кода из углового js

var requestAnimationFrame = $window.requestAnimationFrame ||
                                $window.webkitRequestAnimationFrame ||
                                $window.mozRequestAnimationFrame;

 var rafSupported = !!requestAnimationFrame;

, и они намерены установить rafSupported в true или false на основе доступности функции в requestAnimationFrame

, это может быть достигается путем проверки следующим образом:

if(typeof  requestAnimationFrame === 'function')
rafSupported =true;
else
rafSupported =false;

может использоваться короткий путь !!

rafSupported = !!requestAnimationFrame ;

, поэтому, если requestAnimationFrame была назначена функция, тогда! requestAnimationFrame будет ложным и еще один! из этого было бы правдой

, если requestAnimationFrame было объявлено undefined, тогда! requestAnimationFrame будет правдой и еще одним! это было бы неверно

1
задан Jason Shave - MSFT 22 February 2019 в 20:13
поделиться

2 ответа

Ничего особенного. Попробуйте создать новую библиотеку классов с именем "Animal" и добавьте следующий код:

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

Постройте проект (для создания .dll). Вы можете найти .dll в <projectLocation>\bin\<Release|Debug>.

Теперь откройте PowerShell и введите этот код:

Add-Type -Path "C:\...\Projects\Animal\Animal\bin\Debug\Animal.dll"
$dog = [Animal.Dog]::new()
$dog.Bark()

Выход

enter image description here

0
ответ дан Rufus L 22 February 2019 в 20:13
поделиться

Другой альтернативой является создание полноценного модуля PowerShell. Вот быстрый способ сделать это:

  1. Создать новое решение для библиотеки классов
  2. NuGet в Microsoft.PowerShell.5.ReferenceAssemblies
  3. Создать простой класс POCO (просто как демо) ) like:

Класс My Greeting:

public class GreetingClass
{
    public string Greeting { get; set; }
    public string ToWhom { get; set; }
}
  1. Затем создайте класс Cmdlet, который наследуется от System.Management.Automation.Cmdlet и поставляется с несколькими атрибутами PowerShell: [ 1128]

Вот мое:

[Cmdlet(VerbsCommon.New, "Greeting")]
[OutputType(typeof(GreetingClass))]
public class NewGreeting : Cmdlet
{
    [Parameter(Mandatory = true)]
    public string Greeting { get; set; }

    [Parameter]
    [Alias("Who")]
    public string ToWhom { get; set; } = "World";

    protected override void ProcessRecord()
    {
        base.ProcessRecord();

        WriteVerbose("Creating and returning the Greeting Object");
        var greeting = new GreetingClass {Greeting = Greeting, ToWhom = ToWhom};
        WriteObject(greeting);
    }
}
  1. Чтобы отладить его, откройте свойства проекта вкладки Debug и установите:
    • Запустите внешнюю программу: C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
    • Аргументы командной строки: -noprofile -noexit -command "import-module .\yourProjectName.dll

Теперь нажмите F5. Появится консоль PowerShell. Поскольку вы импортировали свой модуль, командлет New-Greeting загружен. Итак, все это работает:

PS C:\> New-Greeting -Greeting "hello there" -ToWhom World

, что приводит к:

Greeting    ToWhom
--------    ------
hello there World

Но ваш командлет является полноценным командлетом PowerShell, поэтому он может попасть в конвейер. Это:

PS C:\> New-Greeting -Greeting "What's new" -ToWhom Pussycat | Format-List

приведет к:

Greeting : What's new
ToWhom   : Pussycat

Поскольку вы запускаете сеанс PowerShell, когда нажимаете F5 и загружаете свой модуль, вы можете установить точки останова в своем коде, одношаговый и т. д. в отладчике.

Вы получаете все обычное совершенство PowerShell. Вы можете использовать -Who как псевдоним для -ToWhom. Параметр -Greeting описывается как обязательный, поэтому, если вы его забудете, консоль предложит вам.

Вы также можете предоставлять методы в своем классе POCO. Например, если вы добавите этот метод в GreetingClass:

public void SayHello()
{
    Console.WriteLine($"{Greeting} {ToWhom}");
}

Вы можете сделать это в PowerShell:

PS C:\> $greet = New-Greeting -Greeting Hello -Who World
PS C:\> $greet.SayHello()

и получить в результате:

[ 118]

Я многому научился из этого: https://www.red-gate.com/simple-talk/dotnet/net-development/using-c-to-create-powershell-cmdlets- the-basics /

Вы автоматически получаете базовую помощь Get-Help из PowerShell, но если вы будете следовать демонстрациям Red-Gate (по ссылке выше), вы узнаете, как разбогатеть Get-Help Справка из стандартных комментариев C # XML (из пакета XmlDoc2CmdletDoc NuGet).

0
ответ дан Flydog57 22 February 2019 в 20:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: