Powershell从自定义DLL调用构造函数“异常调用”.ctor“with”1“参数:”索引1超出范围。“”

时间:2015-08-27 16:37:08

标签: c# powershell constructor

我希望有人能帮忙解决这个问题,我搜索过,似乎无法找到答案,甚至找不到同样的问题。

我正在从文件加载程序集(即使我有v2 Powershell add-type在这个实例中有一些奇怪的行为)。

[System.Reflection.Assembly]::LoadFrom("$env:userprogile\path\to\my\dll\mydll.dll")

$taskId = 1 $ts = New-Object mydll.myclass -ArgumentList @(,$taskId)

DLL加载正常,构造函数按预期变得可用,但在尝试将参数解析为它时,实际上只需要一个,在这种情况下它会抛出此错误

New-Object : Exception calling ".ctor" with "1" argument(s): "Index 1 is out of range." At line:1 char:7 + $ts = New-Object mydll.myclass + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (:) [New-Object], MethodInvocationException + FullyQualifiedErrorId : ConstructorInvokedThrowException,Microsoft.PowerShell.Commands.NewObjectCommand

当传递1的整数时,单元测试和测试app的工作正常。

$taskId -is [int]给出了真实,我尝试通过以下方式传递: -ArgumentList 1 -ArgumentList (1) -ArgumentList @(1),我相信还有其他更荒谬的事情 有趣的是,所有人都犯了同样的错误......

构造函数签名:

public sealed class myclass: IDisposable
{
    private readonly int _taskId = 0;
    private ScheduledTask scheduledTask = null;

    public myclass(int taskId)
    {
        if (taskId == 0)
            throw new ApplicationException("Task Id is not valid");

        _taskId = taskId;
        scheduledTask = TaskJobFactory.CreateScheduledTask(this._taskId);
    }

    public void RunTask()
    {

        DataTable dt = null;
        String csvString = String.Empty;

        try
        {
            dt = TaskJobFactory.CreateTableTask(scheduledTask.EnumTaskType, scheduledTask.campaignID.Value);
            csvString = Csv.DataTableToCsc(dt);

            if (csvString.Length > 0)
            {
                SmtpManager.SendEmailStatic(csvString, scheduledTask.Id, scheduledTask);
                TaskHistoryFactory.UpdateTaskHistory(this._taskId, (int)ScheduledTaskStatus.Success, "Success");
            }
            else
                TaskHistoryFactory.UpdateTaskHistory(this._taskId, (int)ScheduledTaskStatus.Unknown, String.Format("No Data for that Taks id {0}", _taskId));
        }
        catch (Exception ex)
        {
            TaskHistoryFactory.UpdateTaskHistory(this._taskId, (int)ScheduledTaskStatus.Failure, "Fail");
            ErorrLoggingFacede.LogError(ex, "TaskRunner", "RunTask");
            throw ex;
        }
        finally
        {
            dt = null;
        }
    }
}

抱歉格式化......

另外,我尝试使用一个空的构造函数并将args直接传递给方法,它在测试应用程序中工作(有一些错误,因为它不是为此而构建的,但实际上已完成)

0 个答案:

没有答案