由C#程序集执行的Powershell脚本不起作用(无法转换值)

时间:2015-08-06 08:53:36

标签: c# .net powershell .net-assembly

我有一个简单的控制台应用程序,用C#编写,调用PowerShell脚本。一切正常,直到我将另一个程序集添加到控制台应用程序,也加载到PowerShell脚本中。

以下是PowerShell脚本的调用:

Runspace runspace = RunspaceFactory.CreateRunspace();
runspace.Open();

RunspaceInvoke runSpaceInvoker = new RunspaceInvoke(runspace);           
Pipeline pipeline = runspace.CreatePipeline();
Command command = new Command(@"d:\invokeme.ps1");

pipeline.Commands.Add(command);

pipeline.Invoke();

PowerShell脚本加载两个程序集:

AssemblyA:

namespace AssemblyA
{
    public class ClassA
    {
        public readonly string Name;

        public ClassA(string aName)
        {
            Name = aName;
        }
    }
}

AssemblyB:

namespace AssemblyB
{
    public class ClassB
    {
        private readonly ClassA classA;

        public ClassB(ClassA aClassA)
        {
            classA = aClassA;
        }

        public string GetText()
        {
            return classA.Name;
        }
    }
}

这是PowerShell脚本:

$assemblyA = "D:\Projects\PsInvoke\AssemblyA\bin\Debug\AssemblyA.dll"
$assemblyB = "D:\Projects\PsInvoke\AssemblyB\bin\Debug\AssemblyB.dll"

Add-Type -Path $assemblyA
Add-Type -Path $assemblyB

$objA = New-Object -TypeName AssemblyA.ClassA 'Hello'
$objB = New-Object -TypeName AssemblyB.ClassB $objA

控制台应用程序工作直到我添加并使用AssemblyA的引用到控制台应用程序,然后我收到以下错误:

  

未处理的类型异常   发生'System.Management.Automation.CmdletInvocationException'   System.Management.Automation.dll

     

附加信息:无法转换参数“0”,值为:   “AssemblyA.ClassA”,为“ClassB”键入“AssemblyA.ClassA”:“不能   将“AssemblyA.ClassA”类型的“AssemblyA.ClassA”转换为   输入“AssemblyA.ClassA ”。“

如果我也添加并对控制台应用程序使用引用AssemblyB ,那么所有都可以正常工作

PowerShell脚本和控制台应用程序中加载PowerShell脚本中使用的每个程序集是否有不同的解决方法?有人可以解释这种行为吗?

0 个答案:

没有答案