Powershell脚本中的C#DataTable

时间:2017-03-14 06:08:18

标签: c# .net powershell

我能够在Powershell v2.0脚本中运行C#代码示例,如下所示:

$Source = @"
using System;

namespace CSharpInPowershell
{
    public static class Sample
    {
        public static void TryDataTable()
        {
            Console.WriteLine("Hello World");
            Console.ReadLine();
        }
    }
}
"@

Add-Type -TypeDefinition $Source -Language CSharp

[CSharpInPowershell.Sample]::TryDataTable()

但是,我在尝试添加数据表时遇到错误:

Add-Type -AssemblyName System.Data

$Source = @"
using System;
using System.Data;

namespace CSharpInPowershell
{
    public static class Sample
    {
        public static void TryDataTable()
        {
            Console.WriteLine("Hello World");
            DataTable table = new DataTable();
            Console.ReadLine();
        }
    }
}
"@

Add-Type -TypeDefinition $Source -Language CSharp

[CSharpInPowershell.Sample]::TryDataTable()  

我得到的错误如下:

  

Add-Type:c:\ Users(userid)\ AppData \ Local \ Temp \ qbefurwr.0.cs(2):The   类型或命名空间名称“数据”在命名空间“系统”中不存在   (你错过了一个程序集引用吗?)   c:\ Users(userid)\ AppData \ Local \ Temp \ qbefurwr.0.cs(1):using System;   c:\ Users(userid)\ AppData \ Local \ Temp \ qbefurwr.0.cs(2):>>>运用   System.Data; c:\ Users(userid)\ AppData \ Local \ Temp \ qbefurwr.0.cs(3):   namespace CSharpInPowershell在行:1 char:9   + Add-Type<<<< -TypeDefinition $ Source -Language CSharp       + CategoryInfo:InvalidData:(c:\ Users(userid)... bly reference?):CompilerError)[Add-Type],Exception       + FullyQualifiedErrorId:SOURCE_CODE_ERROR,Microsoft.PowerShell.Commands.AddTypeCommand

     

Add-Type:无法添加类型。有编译错误。在线:1   焦炭:9   + Add-Type<<<< -TypeDefinition $ Source -Language CSharp       + CategoryInfo:InvalidData:(:) [Add-Type],InvalidOperationException       + FullyQualifiedErrorId:COMPILER_ERRORS,Microsoft.PowerShell.Commands.AddTypeCommand

正如您所看到的,我尝试使用Add-Type -AssemblyName System.Data添加引用。我的目标是能够在Powershell脚本中使用C#代码示例。我知道我可以在Powershell中重写这一切,但我正试图让这种类型的脚本工作。

如何获取C#代码中识别的System.Data的程序集引用?

更新:感谢@SomeShinyObject,我有以下工作脚本:

$Source = @"
using System;
using System.Data;

namespace CSharpInPowershell
{
    public static class Sample
    {
        public static void TryDataTable()
        {
            Console.WriteLine("Hello World");
            DataTable table = new DataTable();
            Console.ReadLine();
        }
    }
}
"@

Add-Type -TypeDefinition $Source -Language CSharp `
         -ReferencedAssemblies System.Data, System.XML

[CSharpInPowershell.Sample]::TryDataTable()

1 个答案:

答案 0 :(得分:2)

您需要使用ReferencedAssemblies参数。

#When I tested, System.XML also needed to be added for it to work so I included it
Add-Type -TypeDefinition $Source -Language CSharpVersion3 -ReferencedAssemblies System.Data, System.XML