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
though (активно разрабатывает определение типа). Если это не та часть, которая меняется, тогда игнорируйте ошибки, если это конечная ошибка использования -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" )