PowerShell: точка в имени Enum приводит к сбою 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__

Вот ошибка, которую я получаю:

Тип добавления: 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 + ~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~+ Информация о категории: InvalidData: (c:\Users\User1...513: } ожидаемый: CompilerError) [Add-Type], Exception + FullyQualifiedErrorId: SOURCE_CODE_ERROR, Microsoft.PowerShell.Commands.AddTypeCommand
Add-Type: 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) : >>> } В строке:10 char:1 + Add-Type -TypeDefinition $TypeEnum -Language CShar pVersion3 + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~ + CategoryInfo: InvalidData: (c:\Users\User1...f-файл ожидается:CompilerError) [Add-Type], Exception + FullyQualifiedErrorId: SOURCE_CODE_ERROR,Microsoft.PowerShell.Commands .AddTypeCommand
Add-Type: невозможно добавить тип. Были ошибки компиляции. В строке: 10 символов: 1 + Add-Type -TypeDefinition $TypeEnum -Language CSharpVersion3 + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo: InvalidData: (:) [Add-Type], InvalidOperationException + FullyQualifiedErrorId: COMPILER_ERRORS, Microsoft. PowerShell.Commands.AddTypeCommand Невозможно найти тип [Types.Id]: убедитесь, что сборка, содержащая этот тип, загружена. В строке:12 char:1 + ([Types.Id]::'Name.A').value__ + ~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~ + CategoryInfo: InvalidOperation: (Types.Id:TypeName) [], RuntimeException + FullyQualifiedErrorId: TypeNotFound


person TDN    schedule 05.10.2016    source источник
comment
Это недопустимый С#.   -  person Seth Flowers    schedule 05.10.2016
comment
Не могли бы вы уточнить, что нужно изменить и т. Д.?   -  person TDN    schedule 05.10.2016
comment
С# не позволяет точке быть частью идентификатора.   -  person user4003407    schedule 05.10.2016
comment
Измените Name.A на NameA. Точки не допускаются в идентификаторах в C#. Почему ты не хочешь убрать точку?   -  person Chris Dunaway    schedule 05.10.2016
comment
Поскольку идентификатор получен, я просто подумал о том, чтобы удалить точку из имени, прежде чем получить значение перечисления.   -  person TDN    schedule 05.10.2016


Ответы (1)


Это ограничение .Net и, соответственно, PowerShell и C#. В именах членов Enum не может быть знаков препинания.

Таким образом, краткий ответ: вы не можете заставить эту работу работать, не сделав что-то хакерское (вам придется изменить name.A на имя[CharacterCode]A или добавить описание, или какую-то другую странную вещь, которую вы действительно не должны делать)

person Austin T French    schedule 05.10.2016