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
相关产品推荐
相关产品推荐

