【发布时间】:2019-07-10 17:56:59
【问题描述】:
我正在尝试编写 PowerShell 脚本,但遇到了错误。
当我的脚本到达该行时
$tfs = [Microsoft.TeamFoundation.Client.TeamFoundationServerFactory]::GetServer($server)
我得到错误:
找不到类型 [Microsoft.TeamFoundation.Client.TeamFoundationServerFactory]...
InvalidOperation: (Microsoft.TeamF...onServerFactory:TypeName) [], RuntimeException
虽然我的问题与this question 非常相似,但我已经知道 Microsoft.TeamFoundation.Client.dll 文件及其依赖项位于 GAC 中。另一个问题从未澄清这一点,我认为这可能会影响我将得到的答案。
在发生错误的行之前,我有许多 Add-Type 语句来确保我需要的引用在那里。这些语句中有一个指向 Microsoft.TeamFoundation.Client.dll 的 Add-Type 语句。我已验证它正在寻找正确的位置。
我还包含了一个 try-catch 语句,如果那里出现任何问题,它会打印加载程序异常。目前,脚本成功地通过了这些语句,而没有遇到 catch 块。
鉴于我知道相关的 dll 已经在 GAC 中,什么可能导致此错误,我将如何修复它?
【问题讨论】:
-
在尝试引用类型之前您是否尝试过
Add-Type ...?即使是在 GAC 中,我发现我经常需要Add-Type才能引用类型。 -
我确实有。我什至在它周围添加了一个 try-catch 语句,以在 Add-Type 失败时打印加载程序异常,因此我确认这些语句没有失败。
-
如何检查这些程序集在 GAC 中?您可以通过添加引用将这些程序集添加到控制台应用程序吗?
-
@starianchen-MSFT 在脚本的前面,我执行 [Reflection.Assembly]::LoadFrom($assemblyPath),然后执行 Add-Type -Path $assemblyPath。我还手动检查了这些路径是否已添加到 GAC,方法是转到目录并直观地确认在我运行脚本时确实添加了程序集。
-
更好的方法是从项目的文件夹中加载程序集。
标签: powershell tfsbuild gac