Как ссылаться на сборки .NET с помощью PowerShell

Я разработчик/архитектор С# .NET и понимаю, что он использует объекты (объекты .NET), а не только потоки/текст.

Я хотел бы иметь возможность использовать PowerShell для вызова методов в моих сборках .NET (библиотека C#).

Как сослаться на сборку в PowerShell и использовать эту сборку?


person Russell    schedule 20.06.2010    source источник


Ответы (2)


Взгляните на сообщение в блоге Загрузить пользовательскую DLL из PowerShell:

Возьмем, к примеру, простую математическую библиотеку. Он имеет статический метод Sum и экземплярный метод Product:

namespace MyMathLib
{
    public class Methods
    {
        public Methods()
        {
        }

        public static int Sum(int a, int b)
        {
            return a + b;
        }

        public int Product(int a, int b)
        {
            return a * b;
        }
    }
}

Скомпилируйте и запустите в PowerShell:

> [Reflection.Assembly]::LoadFile("c:\temp\MyMathLib.dll")
> [MyMathLib.Methods]::Sum(10, 2)

> $mathInstance = new-object MyMathLib.Methods
> $mathInstance.Product(10, 2)
person Darin Dimitrov    schedule 20.06.2010
comment
Ссылка загружается здесь. Я обновлю свой пост и скопирую из него соответствующую часть. - person Darin Dimitrov; 20.06.2010
comment
Спасибо за текст. :) Теперь я знаю, почему я не мог найти ответ, когда искал. Я попробую и дам вам знать, как я иду. :) - person Russell; 20.06.2010
comment
Вы также можете использовать командлет Add-Type. - person Joey; 20.06.2010
comment
@Johannes Rossel - Как использовать командлет Add-Type? Судя по команде get-help, это для динамических сборок? - person Russell; 20.06.2010
comment
@Рассел: add-type -path .\foo.dll. Вы также можете использовать его для прямой компиляции кода. - person Joey; 20.06.2010
comment
@Johannes, вы должны добавить это как новый ответ. Я проголосую за это;) Я думаю, что, если это возможно, следует использовать стандартные средства PowerShell и чистый .NET только при необходимости. - person stej; 21.06.2010
comment
@stej: То же самое здесь. Хотя Add-Type не существовало до v2, если я не ошибаюсь, поэтому он заслуживает упоминания, хотя, по моему скромному мнению, отдельного ответа нет. - person Joey; 21.06.2010
comment
@Йоханнес, Дарин в основном прав. Его решение будет работать. Однако если сюда зайдет кто-то другой (например, из гугла), то он увидит свой ответ и не будет читать комментарии. Вот почему я думаю, что должен быть другой ответ с Add-Type. - person stej; 21.06.2010
comment
@stej: Тогда ты можешь дать это. В любом случае вам нужно больше представителей, чем мне ;-) - person Joey; 21.06.2010
comment
Привет, ребята, спасибо, тип надстройки - это то, что я ищу. :) Было бы неплохо вынести это в отдельный вопрос, так как Add-type — более приятное решение (более встроенное в powershell), хотя и для версии 2.0 и выше. - person Russell; 21.06.2010
comment
404 по ссылке в начале поста. - person Sean B; 25.09.2015
comment
Разве это не работает для .NET Standard dll? Я получаю эту ошибку, когда запускаю Add-Type -Path "C\some.dll" Could not load file or assembly 'netstandard, Version=2.1.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51' or one of its dependencies. The system cannot find the file specified. - person Kellen Stuart; 23.11.2019
comment
Этот пример очень похож на Ли Холмса — leeholmes.com/blog/2006/10/27/load-a-custom-dll-from-powershell. - person Adam; 31.01.2020

В PowerShell 2.0 вы можете использовать встроенный командлет Add-Type.

Вам просто нужно указать путь к dll.

Add-Type -Path foo.dll

Кроме того, вы можете использовать встроенный C# или VB.NET с Add-Type. Синтаксис @" — это строка ЗДЕСЬ.

C:\PS>$source = @"
    public class BasicTest
    {
        public static int Add(int a, int b)
        {
            return (a + b);
        }

        public int Multiply(int a, int b)
        {
            return (a * b);
        }
    }
    "@

    C:\PS> Add-Type -TypeDefinition $source

    C:\PS> [BasicTest]::Add(4, 3)

    C:\PS> $basicTestObject = New-Object BasicTest 
    C:\PS> $basicTestObject.Multiply(5, 2)
person Andy Schneider    schedule 21.06.2010
comment
Пара вариантов для этого PowerShell в Visual Studio: powerguivsx.codeplex.com PowerShell Plus: IDE powershellplus.com - person Andy Schneider; 24.06.2010
comment
Последняя версия ISE имеет intellisense. - person MDMoore313; 01.11.2013
comment
Add-Type : Невозможно добавить тип. Расширение .EXE не поддерживается. - person Monso; 03.12.2013
comment
просто нажмите вкладку для автозаполнения и привыкните делать |gm тонну. нет необходимости в IDE. - person Nacht; 27.03.2014
comment
Я работал над «Расширением .EXE не поддерживается», переименовав его в .DLL: P - person Vimes; 16.11.2018
comment
Как это работает, когда у вас есть класс с кучей зависимостей? - person Kellen Stuart; 23.11.2019