我有这个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; }
}
}
以下是尝试从文件中读取类的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}
}
*注意最后一行是占位符,以便稍后更复杂的逻辑。
对于文件中的每个get / set,这会在Add-Type处中断,并显示此错误消息。
'MyApp.VM.MyClassVM.CtrId.get'必须声明一个正文,因为它未标记为抽象或外部
我将非常感谢有关我所做错事的任何信息。
答案 0 :(得分: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
输出:
CtrId : 500
CtrName : Testing
CtrPhone : 555-1212
CtrZip : 12345
AddDate : 1/28/2011 6:16:26 PM
答案 1 :(得分:3)
由于您在类型定义中使用属性快捷方式,因此需要确保使用-Language CSharpVersion3
命令中的Add-Type
使用C#v3进行编译。
正如@voodoomsr指出的那样,你必须提供New-Object
的命名空间,或者你可以从Add-Type
返回@Chuck使用-PassThru
参数的类型。
以下是Build-POGO
函数的示例:
function Build-Pogo
{
$FileDir = "D:\YourDirectoryOfPogo"
$ClassName = "MyClassVM"
$FileName = $FileDir + "\" + $ClassName + ".cs"
$AllLines = (Get-Content $FileName) -join "`n"
$type = Add-Type -TypeDefinition $AllLines -Language CSharpVersion3 -PassThru
New-Object $type
}
答案 2 :(得分:1)
您有2个错误,1:缺少该类型的命名空间,2:您没有打印任何内容。 我给你一个可能的更正:
$ClassHandle = New-Object -typeName MyApp.VM.$ClassName
$ClassHandle | fl #basic way to print the members
更精美的成员印刷品(属性)
$ClassHandle | gm -MemberType Property |
% {write-host $_.name -for red -nonewline;
[console]::setcursorposition(15,[console]::cursortop);
write-host $classhandle.($_.name) -f white}