0
我正在寫一個PowerShell腳本,如果它尚未加載,則會加載程序集。我給這家在C#中的邏輯是以下幾點:如何使用C#編寫try-get函數?
void DoSomething(string assemblyFilePath)
{
string name = Path.GetFileNameWithoutExtension(assemblyFilePath);
Assembly assemblyObject;
if (!TryGetAssembly(name, out assemblyObject))
{
assemblyObject = LoadAssemblyFrom(assemblyFilePath);
}
// Do something with assemblyObject.
}
我試着翻譯成PowerShell中,但它不工作了這麼遠。這裏是我的進步:
function TryGet-Assembly($assembly, [ref] $cached)
{
$domain = [AppDomain]::CurrentDomain
foreach ($reference in $domain.GetAssemblies())
{
# GetName() has a type of AssemblyName,
# so we need to use GetName().Name to get a string
$name = $reference.GetName().Name
if ($name -eq $assembly)
{
$cached = $reference
return $true
}
}
return $false
}
function Get-Namespaces($assembly)
{
# Load the assembly, or retrieve it if it's cached
$name = [IO.Path]::GetFileNameWithoutExtension($assembly)
if (-not TryGet-Assembly $name $assemblyObject)
{
$assemblyObject = Load-Assembly $assembly
}
# Do the actual work
$types = $assemblyObject.GetTypes()
return $types | ? IsPublic | select Namespace -Unique
}
出於某種原因,我似乎在PowerShell嘗試運行腳本時出現語法錯誤。這裏是輸出:
At C:\Users\James\Code\csharp\Shims.Xaml\generate.ps1:83 char:13 + if (-not TryGet-Assembly $name $assemblyObject) + ~ Missing expression after unary operator '-not'. At C:\Users\James\Code\csharp\Shims.Xaml\generate.ps1:83 char:14 + if (-not TryGet-Assembly $name $assemblyObject) + ~~~~~~~~~~~~~~~ Unexpected token 'TryGet-Assembly' in expression or statement. At C:\Users\James\Code\csharp\Shims.Xaml\generate.ps1:83 char:14 + if (-not TryGet-Assembly $name $assemblyObject) + ~~~~~~~~~~~~~~~ Missing closing ')' after expression in 'if' statement. At C:\Users\James\Code\csharp\Shims.Xaml\generate.ps1:80 char:1 + { + ~ Missing closing '}' in statement block or type definition. At C:\Users\James\Code\csharp\Shims.Xaml\generate.ps1:83 char:51 + if (-not TryGet-Assembly $name $assemblyObject) + ~ Unexpected token ')' in expression or statement. At C:\Users\James\Code\csharp\Shims.Xaml\generate.ps1:91 char:1 + } + ~ Unexpected token '}' in expression or statement. + CategoryInfo : ParserError: (:) [], ParseException + FullyQualifiedErrorId : MissingExpressionAfterOperator
爲什麼會發生這種情況,我該如何解決這個問題?
你爲什麼不向我們展示你在C#中編寫的'TryGetAssembly'? – poke
這就是說,對於你的語法錯誤,你需要在'-not'的操作數週圍加上括號。 – poke
@poke太棒了,謝謝!這解決了它。 –