我有一个简单的控制台应用程序,用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
脚本中使用的每个程序集是否有不同的解决方法?有人可以解释这种行为吗?