PowerShell Add-Type: не удается добавить тип. уже существовать
Я использую сценарий PowerShell для запуска кода C# непосредственно в сценарии. Я несколько раз натыкался на ошибку, конкретную ошибку. Если я внесу какие-либо изменения в код C# в PowerShell ISE и попытаюсь запустить его снова, я получу следующую ошибку.
Add-Type : Cannot add type. The type name 'AlertsOnOff10.onOff' already exists.
At C:UserstestUserDesktoptest.ps1:80 char:1
+ Add-Type -TypeDefinition $Source -ReferencedAssemblies $Assem
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (AlertsOnOff10.onOff:String) [Add-Type], Exception
+ FullyQualifiedErrorId : TYPE_ALREADY_EXISTS,Microsoft.PowerShell.Commands.AddTypeCommand
Я решил эту ошибку, изменив пространство имен и команду для вызова метода C# [AlertsOnOff10.onOff]::Main("off"). Я могу предотвратить эту ошибку, не меняя пространство имен и вызов метода?
2 ответов:
Насколько мне известно нет никакого способа, чтобы удалить тип из сеанса PowerShell после того, как он был добавлен.
(раздражающий) обходной путь, который я бы предложил, состоит в том, чтобы написать свой код в одном сеансе ISE и выполнить его в совершенно другом сеансе (отдельное окно консоли или отдельный ISE, если вы хотите иметь возможность отлаживать).
Это имеет значение только в том случае, если вы изменяете
$Source(активно разрабатывая определение типа). Если это не та часть, которая меняется, то игнорируйте ошибки, если это конечная ошибка использования-ErrorActionдля ее изменения.
Вы можете выполнить его как Задание:
$cmd = { $code = @' using System; namespace MyCode { public class Helper { public static string FormatText(string message) { return "Version 1: " + message; } } } '@ Add-Type -TypeDefinition $code -PassThru | Out-Null Write-Output $( [MyCode.Helper]::FormatText("It Works!") ) } $j = Start-Job -ScriptBlock $cmd do { Receive-Job -Job $j } while ( $j.State -eq "Running" )
Comments