如何从 Powershell 调用具有自定义类型输入的 C# DLL

问题描述 投票:0回答:1

假设我有一个 C# DLL,其中包含一个类

AdditionLibrary
,如下所示

namespace AdditionLibrary
{
    public static class AdditionOperation
    {
        public static int Add(int a, int b)
        {
            return a + b;
        }
        public struct AddNumbers
        {
            public int a;
            public int b;
        }
        public static int AddNum(AddNumbers addNum)
        {
            return addNum.a + addNum.b;
        }
    }
}

我想从 powershell 调用此类的

Add
AddNum
方法。 我可以轻松地调用
Add
方法,因为它是 POD 数据类型 (int),如下所示,来自 powershell。

Add-Type -Path "AdditionLibrary.dll"
$result = [AdditionLibrary.AdditionOperation]::Add(100,200)

如何调用需要自定义类型

AddNum
AddNumbers
方法?

是否可以不将代码嵌入到 powershell 中(如下所示)并通过调用表达式进行调用?

Add-Type -TypeDefinition $code -Language CSharp 

我不知道如何在 powershell 中创建 AddNumbers 实例并将其作为参数传递给 C# DLL。

c# powershell
1个回答
2
投票

您可以使用哈希表语法来实例化

AddNumbers
。由于所有
struct
都有一个空向量,因此这种语法应该始终适用于它们。请参阅从哈希表创建对象

Add-Type '
namespace AdditionLibrary
{
    public static class AdditionOperation
    {
        public static int Add(int a, int b)
        {
            return a + b;
        }
        public struct AddNumbers
        {
            public int a;
            public int b;
        }
        public static int AddNum(AddNumbers addNum)
        {
            return addNum.a + addNum.b;
        }
    }
}'

$addNum = [AdditionLibrary.AdditionOperation+AddNumbers]@{
    a = 1
    b = 2
}

[AdditionLibrary.AdditionOperation]::AddNum($addNum) # 3
© www.soinside.com 2019 - 2024. All rights reserved.