如何通过使用Powershell从另一个类(.cs)文件中读取来创建类?

Raz*_*cer 3 powershell powershell-2.0

我有这个POGO(简单的putter getter)类,我试图在PowerShell中阅读

using System;
using System.Runtime.Serialization;

namespace MyApp.VM
{
  [Serializable]
  public class MyClassVM
  {
      public Int64 CtrId { get; set; }
      public string CtrName { get; set; }
      public string CtrPhone { get; set; }
      public string CtrZip { get; set; }
      public DateTime AddDate { get; set; }
  }
}
Run Code Online (Sandbox Code Playgroud)

这是尝试从文件中读取类的ps1代码.

function Build-Pogo
{
    $FileDir   = "D:\YourDirectoryOfPogo" 
    $ClassName = "MyClassVM"
    $FileName  = $FileDir + "\" + $ClassName + ".cs"

    # Build the class from the file
    $AllLines = [string]::join([environment]::newline, (Get-Content $FileName))
    Add-Type -TypeDefinition $AllLines

    # spin thru each property for class
    $ClassHandle = New-Object -typeName $ClassName
    $ClassHandle | ForEach-Object {Write-Host $_.name -foregroundcolor cyan}
}
Run Code Online (Sandbox Code Playgroud)

*注意最后一行是占位符,以便稍后使用更复杂的逻辑.

对于文件中的每个get/set,这会在Add-Type中断,并显示此错误消息.

'MyApp.VM.MyClassVM.CtrId.get'必须声明一个正文,因为它没有标记为抽象或外部

关于我做错的任何信息将不胜感激.

Chu*_*rly 5

试试这个代码,它对我有用.

$type = Add-Type -Path $FileName -PassThru

$x = New-Object $type
$x.CtrId = 500
$x.CtrName = 'Testing'
$x.CtrPhone = '555-1212'
$x.CtrZip = '12345'
$x.AddDate = Get-Date

$x
Run Code Online (Sandbox Code Playgroud)

输出:

CtrId    : 500
CtrName  : Testing
CtrPhone : 555-1212
CtrZip   : 12345
AddDate  : 1/28/2011 6:16:26 PM
Run Code Online (Sandbox Code Playgroud)