You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Powershell调用C# DLL创建对象无法识别无参构造函数如何解决

问题原因

C#中类的成员未显式声明访问修饰符时,默认访问级别为私有(private)。你定义的CustMessage无参构造函数没有加public修饰符,属于私有构造函数,PowerShell的New-Object默认只能调用公共构造函数,因此会报错找不到合适的构造函数。
删除自定义无参构造函数后,C#编译器会自动为类生成一个公共无参构造函数,所以此时可以正常创建实例。

解决方案

方案1:修改C#类定义(推荐)

直接给自定义无参构造函数添加public访问修饰符即可,修改后代码如下:

public class CustMessage
{
    // 新增public修饰符,公开构造函数
    public CustMessage()
    {
        TimeStamp = DateTime.UtcNow;
        Id = Guid.NewGuid().ToString();
    }
  
    public string Id { get; set; }
    public DateTime TimeStamp { get; set; }       
}

重新编译DLL后,你原本的PowerShell命令就可以正常执行。

方案2:不修改C#代码,调整PowerShell调用方式

如果暂时无法修改DLL源码,可以通过反射直接调用私有构造函数创建实例,PowerShell代码如下:

$assembly = [Reflection.Assembly]::LoadFile("Path_To_My_DLL")
$type = $assembly.GetType("MyNameSpace.CustMessage")
# 第二个参数$true表示允许匹配非公共构造函数
$instance = [System.Activator]::CreateInstance($type, $true)

内容的提问来源于stack exchange,提问作者puneet

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 11:24:07