创建C#dll并使用powershell方法

Nai*_*gel 1 c# dll powershell

我创建了一个简单的C#dll并使用它注册了它RegAsm.exe.一个非常简单的方法是在没有参数的情况下调用并返回一个数字,这里是一个简化版本.

namespace AVL_test {
    interface ITestClass {
        int GetNumber();
    }

    [ComVisible(true)]
    public class TestClass: ITestClass {
        public TestClass() { }

        public int GetNumber() {
            return 10;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我需要从Powershell调用该方法,所以我添加了类型

Add-Type -Path "C:\myPath\AVL_test.dll"
Run Code Online (Sandbox Code Playgroud)

它似乎被加载,因为如果[AVL_test.TestClass]我得到这个输出

IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True False TestClass System.Object

但如果我尝试GetNumber()通过键入调用[AVL_test.TestClass]::GetNumber()我得到此错误

方法调用失败,因为[AVL_test.TestClass]不包含名为"GetNumber"的方法.

难道我做错了什么?

Mar*_*kus 7

您的方法应该是static或者您需要创建该类型的实例(TestClass).

最后可以使用

New-Object -TypeName <full qualified type name> -ArgumentList <args>
Run Code Online (Sandbox Code Playgroud)

或者在您的具体情况中:

$test = New-Object -TypeName AVL_Test.TestClass
$test.GetNumber()
Run Code Online (Sandbox Code Playgroud)