Невозможно найти [Microsoft.TeamFoundation.Client.TeamFoundationServerFactory], даже если dll уже находится в GAC - PullRequest
0 голосов
/ 10 июля 2019

Я пытаюсь написать сценарий PowerShell, но у меня возникла ошибка.

Когда мой скрипт попадает в строку

$ tfs = [Microsoft.TeamFoundation.Client.TeamFoundationServerFactory] :: GetServer ($ server)

Я получаю сообщение об ошибке:

Невозможно найти тип [Microsoft.TeamFoundation.Client.TeamFoundationServerFactory] ...

InvalidOperation: (Microsoft.TeamF ... onServerFactory: TypeName) [], RuntimeException

Хотя мой вопрос очень похож на этот вопрос , я уже знаю, что файл Microsoft.TeamFoundation.Client.dll и его зависимости находятся в GAC.Другой вопрос никогда не проясняет это, и я думаю, что это может повлиять на ответы, которые я получу.

Перед строкой, где происходит ошибка, у меня есть несколько операторов Add-Type, чтобы убедиться, что ссылки, которые мне нужны, есть.Среди этих операторов есть оператор Add-Type, указывающий на Microsoft.TeamFoundation.Client.dll.Я убедился, что он смотрит в правильном месте.

Я также включил оператор try-catch, который печатает исключения загрузчика, если там что-то идет не так.В настоящее время скрипт успешно проходит через эти операторы, не затрагивая блок catch.

Учитывая, что я знаю , что соответствующая dll уже есть в GAC, что может вызвать эту ошибку и как бы я ее исправить?

Ответы [ 2 ]

1 голос
/ 11 июля 2019

Я бы предложил вам загрузить сборки из каталога напрямую, например:

 $TfsAssembliesPath="C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\CommonExtensions\Microsoft\TeamFoundation\Team Explorer"
    Add-Type -Path "$TfsAssembliesPath\Microsoft.IdentityModel.Clients.ActiveDirectory.dll"
Add-Type -Path "$TfsAssembliesPath\Microsoft.ServiceBus.dll"
Add-Type -Path "$TfsAssembliesPath\Microsoft.VisualStudio.Services.Common.dll"
Add-Type -Path "$TfsAssembliesPath\Microsoft.VisualStudio.Services.WebApi.dll"
Add-Type -Path "$TfsAssembliesPath\Microsoft.VisualStudio.Services.Client.Interactive.dll"
Add-Type -Path "$TfsAssembliesPath\Microsoft.TeamFoundation.Core.WebApi.dll"
Add-Type -Path "$TfsAssembliesPath\Microsoft.TeamFoundation.Common.dll"
Add-Type -Path "$TfsAssembliesPath\Microsoft.TeamFoundation.Client.dll"
Add-Type -Path "$TfsAssembliesPath\Microsoft.TeamFoundation.TestManagement.Common.dll"
Add-Type -Path "$TfsAssembliesPath\Microsoft.TeamFoundation.ProjectManagement.dll"
Add-Type -Path "$TfsAssembliesPath\Microsoft.TeamFoundation.Build.Client.dll"
Add-Type -Path "$TfsAssembliesPath\Microsoft.TeamFoundation.Build.Common.dll"
Add-Type -Path "$TfsAssembliesPath\Microsoft.TeamFoundation.Git.Client.dll"
Add-Type -Path "$TfsAssembliesPath\Microsoft.TeamFoundation.SourceControl.WebApi.dll"
Add-Type -Path "$TfsAssembliesPath\Microsoft.TeamFoundation.WorkItemTracking.Client.QueryLanguage.dll"
Add-Type -Path "$TfsAssembliesPath\Microsoft.TeamFoundation.WorkItemTracking.Client.DataStoreLoader.dll"
Add-Type -Path "$TfsAssembliesPath\Microsoft.TeamFoundation.WorkItemTracking.Common.dll"
Add-Type -Path "$TfsAssembliesPath\Microsoft.TeamFoundation.WorkItemTracking.WebApi.dll"
Add-Type -Path "$TfsAssembliesPath\Microsoft.TeamFoundation.WorkItemTracking.Proxy.dll"
Add-Type -Path "$TfsAssembliesPath\Microsoft.TeamFoundation.WorkItemTracking.Client.dll"
Add-Type -Path "$TfsAssembliesPath\Microsoft.TeamFoundation.TestManagement.Client.dll"
    Function CreateWorkItem{

    [string]$tfsCollectionUrl="TFS collection URL"
    [string]$tfsTeamProjectName="team project"

    $teamProjectCollection=[Microsoft.TeamFoundation.Client.TfsTeamProjectCollectionFactory]::GetTeamProjectCollection($tfsCollectionUrl)
    $ws = $teamProjectCollection.GetService([type]"Microsoft.TeamFoundation.WorkItemTracking.Client.WorkItemStore")
    $proj = $ws.Projects[$tfsTeamProjectName]

    $wit = $proj.WorkItemTypes["Task"]

    #Create a new work item of that type
    $workitem = $wit.NewWorkItem()

    $workItem.Title = "Sample Task Title 3"
    $workItem.Description = "Sample Description"
    $workitem.AreaPath = $tfsTeamProjectName
    $workitem.IterationPath = $tfsTeamProjectName

    $workItem.Save()
    Write-Host "The TFS work item number is: " $workItem.Id
    }

Вы также можете скопировать сборки в специальную папку (например, папку Lib в текущем проекте)

    $TfsAssembliesPath="$PSScriptRoot\Libs"
    Add-Type -Path "$TfsAssembliesPath\Microsoft.TeamFoundation.Client.dll"
    Add-Type -Path "$TfsAssembliesPath\Microsoft.TeamFoundation.Common.dll"
...
0 голосов
/ 22 июля 2019

Я никогда не использовал это, но я верю, что это будет работать.По крайней мере, я не получил ошибку типа не найден.

using assembly Microsoft.TeamFoundation.Client
using namespace Microsoft.TeamFoundation.Client

$tfs = [TeamFoundationServerFactory]::GetServer($server)

Не то чтобы в PS 6 нет GAC.поэтому вам нужно будет указать полный путь к dll для использования сборки.

...