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太棒了,谢谢!这解决了它。 –