使用PowerShell运行我的第三方DLL文件

38
我不确定PowerShell是否可以实现这一点。
但基本上,我有一个Windows Forms程序来配置一个名为EO Server的程序。 EO Server有一个API,我引用EOServerAPI.dll来运行以下代码。
using EOserverAPI;
...
private void myButton_Click(object sender, EventArgs e)
{
    String MDSConnString="Data Source=MSI;Initial Catalog=EOMDS;Integrated Security=True;";

    //Create the connection
    IEOMDSAPI myEOMDSAPI = EOMDSAPI.Create(MDSConnString);

    //Get JobID
    Guid myMasterJobID = myEOMDSAPI.GetJobID("myJobRocks");
}

是否可以与API DLL文件进行交互,并进行与Windows Forms应用程序相同类型的调用?

4个回答

43

可以,你可以这样做:

Add-Type -Path $customDll
$a = new-object custom.type

你可以像这样调用一个静态方法:

[custom.type]::method()

除了使用Add-Type之外,您还可以使用反射:

[Reflection.Assembly]::LoadFile($customDll)
(请注意,即使是以上代码也会调用Reflection库和LoadFile静态方法。)

我对第二个语句感到困惑。 $a = new-object custom.type我不知道如何调用我的 custom.type 类型。 你能帮我吗? - MicroSumol
@MicroSumol 类型是您类的完全限定名称(命名空间+类名)。例如:A.B.C.ClassName。 - GiriB

12

2

c# dll

Add-Type -Path $dllPath
(new-object namespace.class)::Main() #Where namespace=dllnamespace, class=dllclass, Main()=dllstartvoid

获取信息、命名空间和类

$types = Add-Type -Path $dllPath -PassThru
$types | ft fullname
$types

如果不是"可执行"的dll(例如get/set dll),那么这是我所知道的最佳方法(对于示例dll创建不需要VS): https://kazunposh.wordpress.com/2012/03/19/проверка-корректного-ввода-distinguished-name-в-скри/

2

实际上,其他提供的解决方案对我不起作用,这里有一个替代方案,对我来说完美地解决了问题:

最初的回答:

$AssemblyPath = "C:\SomePath\SomeLIB.dll"
$bytes = [System.IO.File]::ReadAllBytes($AssemblyPath)
[System.Reflection.Assembly]::Load($bytes)

你知道为什么Add-Type无法使用你的dll吗?你会得到什么样的错误信息?还是这个dll有什么异常之处? - Blaisem
1
嗨@Blaisem,我的帖子是三年半之前发布的。我已经记不清了,很抱歉。 - f4d0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接