PowerShell:Enum名称中的点导致Add-Type失败

时间:2016-10-05 19:10:35

标签: c# powershell enums add-type

我在PowerShell中创建了以下枚举。但是,如果我在枚举名称中有一个点(例如,“Name.A”),则Add-Type将返回错误。我该怎么办呢?我不想从“Name.A”中删除点。

$TypeEnum = "
    namespace Types {
        public enum Id { 
            Name.A = 1,
            NameB = 2,
            NameC = 3
        }   
    }"

Add-Type -TypeDefinition $TypeEnum -Language CSharpVersion3

([Types.Id]::'Name.A').value__

这是我得到的错误:

  

Add-Type:c:\ Users \ User1 \ AppData \ Local \ Temp \ ab0z5i1y.0.cs(4):}   预期c:\ Users \ User1 \ AppData \ Local \ Temp \ ab0z5i1y.0.cs(3):
  public enum Id {c:\ Users \ User1 \ AppData \ Local \ Temp \ ab0z5i1y.0.cs(4)   :>>> Name.A = 1,   c:\ Users \ User1 \ AppData \ Local \ Temp \ ab0z5i1y.0.cs(5):
  NameB = 2,At line:10 char:1   + Add-Type -TypeDefinition $ TypeEnum -Language CSharpVersion3   + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~       + CategoryInfo:InvalidData:(c:\ Users \ User1 ... 513:} expected:CompilerError)[Add-Type],Exception       + FullyQualifiedErrorId:SOURCE_CODE_ERROR,Microsoft.PowerShell.Commands.AddTypeCommand
  添加类型:c:\ Users \ User1 \ AppData \ Local \ Temp \ ab0z5i1y.0.cs(8):类型   或命名空间定义,或期望的文件结束   c:\ Users \ User1 \ AppData \ Local \ Temp \ ab0z5i1y.0.cs(7):}
  c:\ Users \ User1 \ AppData \ Local \ Temp \ ab0z5i1y.0.cs(8):>>> } 在   line:10 char:1   + Add-Type -TypeDefinition $ TypeEnum -Language CSharpVersion3   + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~       + CategoryInfo:InvalidData:(c:\ Users \ User1 ... f-file expected:CompilerError)[Add-Type],Exception       + FullyQualifiedErrorId:SOURCE_CODE_ERROR,Microsoft.PowerShell.Commands.AddTypeCommand
  添加类型:无法添加类型。有编译错误。在线:10   焦炭:1   + Add-Type -TypeDefinition $ TypeEnum -Language CSharpVersion3   + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~       + CategoryInfo:InvalidData:(:) [Add-Type],InvalidOperationException       + FullyQualifiedErrorId:COMPILER_ERRORS,Microsoft.PowerShell.Commands.AddTypeCommand Unable   找到类型[Types.Id]:确保包含此类型的程序集   类型已加载。在行:12 char:1   +([Types.Id] ::'Name.A')。value__   + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~       + CategoryInfo:InvalidOperation:(Types.Id:TypeName)[],RuntimeException       + FullyQualifiedErrorId:TypeNotFound

1 个答案:

答案 0 :(得分:2)

这是.Net的限制,以及PowerShell和C#的扩展。枚举成员名称中不能包含标点符号。

因此简短的回答是,你不能做任何hacky(你不得不改名.A来命名[CharacterCode] A或添加描述,或者其他一些奇怪的东西)你真的不应该这样做)