2016-05-03 1 views
0

Wenn ich versuchte, GetDefinitionAsync() mit AzureFunctions zu verwenden, gibt es folgenden Fehler und konnte keine Daten von VSTS abrufen.AzureFunctions konnte nicht verweisen Microsoft.TeamFoundation.Core.WebApi

Ausnahme beim Ausführen der Funktion: Functions.VSTSWebhookCSharp. Microsoft.Azure.WebJobs.Script: Ein oder mehrere Fehler sind aufgetreten. mscorlib: Datei oder Assembly konnte nicht geladen werden 'Microsoft.TeamFoundation.Core.WebApi, Version = 14.0.0.0, Culture = neutral, PublicKeyToken = b03f5f7f11d50a3a' oder eine seiner Abhängigkeiten. Die angegebene Datei wurde vom System nicht gefunden.

ich geprüft, ob DLL von AzureFunctions wiederhergestellt NuGet ist, aber es existiert in "D: \ home \ data \ Funktionen \ packages \ nuget \ Microsoft.TeamFoundationServer.Client \ 14.89.0 \ lib \ net45 \ Microsoft.TeamFoundation.Core.WebApi.dll "

Haben Sie eine Idee mit diesem Fehler?

Der Code, den ich versuchte, folgt. (Es läuft erfolgreich mit ASP.NET Webhook durch.)

#r "Newtonsoft.Json" 
#r "System.Configuration" 

using System; 
using System.Collections.Generic; 
using System.Configuration; 
using System.Diagnostics; 
using System.IO; 
using System.Linq; 
using System.Net; 
using System.Net.Http; 
using System.Text; 
using System.Text.RegularExpressions; 
using System.Threading.Tasks; 
using Microsoft.TeamFoundation.Build.WebApi; 
using Microsoft.VisualStudio.Services.Common; 
using Newtonsoft.Json; 
using Newtonsoft.Json.Linq; 

public static async Task<object> Run(HttpRequestMessage req, TraceWriter log) 
{ 
    string jsonContent = await req.Content.ReadAsStringAsync(); 

    // Deserialize Json 
    var jsonObject = JsonConvert.DeserializeObject<VSTSWebHook>(jsonContent); 

    // From ApplicationSettings 
    var vstsUser = ConfigurationManager.AppSettings["VstsUser"]; 
    var vstsPassword = ConfigurationManager.AppSettings["VstsPassword"]; 

    // Create VSTS Connection from Json Value 
    var project = new Guid(jsonObject.resource.definition.project.id); 
    var definitionId = jsonObject.resource.definition.id; 
    var result = jsonObject.resource.result; 
    var buildId = jsonObject.resource.id; 
    var build = new BuildHttpClient(new Uri("https://<YOUR TENANT>.VisualStudio.com/DefaultCollection/"), new VssBasicCredential(vstsUser, vstsPassword)); 

    // Exception will happen at here. 
    // Obrain definition from VSTS 
    var buildDefinition = await build.GetDefinitionAsync(project, definitionId); 

    return req.CreateResponse(HttpStatusCode.OK, new { 
     body = $"Test Complete.", 
    }); 
} 

public class VSTSWebHook 
{ 
    public string subscriptionId { get; set; } 
    public int notificationId { get; set; } 
    public string id { get; set; } 
    public string eventType { get; set; } 
    public string publisherId { get; set; } 
    public Message message { get; set; } 
    public Detailedmessage detailedMessage { get; set; } 
    public Resource resource { get; set; } 
    public string resourceVersion { get; set; } 
    public Resourcecontainers resourceContainers { get; set; } 
    public DateTime createdDate { get; set; } 
} 

public class Message 
{ 
    public string text { get; set; } 
    public string html { get; set; } 
    public string markdown { get; set; } 
} 

public class Detailedmessage 
{ 
    public string text { get; set; } 
    public string html { get; set; } 
    public string markdown { get; set; } 
} 

public class Resource 
{ 
    public int id { get; set; } 
    public string status { get; set; } 
    public string result { get; set; } 
    public DateTime queueTime { get; set; } 
    public DateTime startTime { get; set; } 
    public DateTime finishTime { get; set; } 
    public string url { get; set; } 
    public Definition definition { get; set; } 
    public string uri { get; set; } 
    public string sourceBranch { get; set; } 
    public string sourceVersion { get; set; } 
    public Queue queue { get; set; } 
    public string priority { get; set; } 
    public string reason { get; set; } 
    public Requestedfor requestedFor { get; set; } 
    public Requestedby requestedBy { get; set; } 
    public DateTime lastChangedDate { get; set; } 
    public Lastchangedby lastChangedBy { get; set; } 
    public Orchestrationplan orchestrationPlan { get; set; } 
    public Logs logs { get; set; } 
    public Repository repository { get; set; } 
} 

public class Definition 
{ 
    public string type { get; set; } 
    public int revision { get; set; } 
    public int id { get; set; } 
    public string name { get; set; } 
    public string url { get; set; } 
    public Project project { get; set; } 
} 

public class Project 
{ 
    public string id { get; set; } 
    public string name { get; set; } 
    public string url { get; set; } 
    public string state { get; set; } 
} 

public class Queue 
{ 
    public object pool { get; set; } 
    public int id { get; set; } 
    public string name { get; set; } 
} 

public class Requestedfor 
{ 
    public string id { get; set; } 
    public string displayName { get; set; } 
    public string uniqueName { get; set; } 
    public string url { get; set; } 
    public string imageUrl { get; set; } 
} 

public class Requestedby 
{ 
    public string id { get; set; } 
    public string displayName { get; set; } 
    public string uniqueName { get; set; } 
    public string url { get; set; } 
    public string imageUrl { get; set; } 
    public bool isContainer { get; set; } 
} 

public class Lastchangedby 
{ 
    public string id { get; set; } 
    public string displayName { get; set; } 
    public string uniqueName { get; set; } 
    public string url { get; set; } 
    public string imageUrl { get; set; } 
    public bool isContainer { get; set; } 
} 

public class Orchestrationplan 
{ 
    public string planId { get; set; } 
} 

public class Logs 
{ 
    public int id { get; set; } 
    public string type { get; set; } 
    public string url { get; set; } 
} 

public class Repository 
{ 
    public string id { get; set; } 
    public string type { get; set; } 
    public object clean { get; set; } 
    public bool checkoutSubmodules { get; set; } 
} 

public class Resourcecontainers 
{ 
    public Collection collection { get; set; } 
    public Account account { get; set; } 
    public Project1 project { get; set; } 
} 

public class Collection 
{ 
    public string id { get; set; } 
} 

public class Account 
{ 
    public string id { get; set; } 
} 

public class Project1 
{ 
    public string id { get; set; } 
} 

UPDATE

mein project.json hier.

{ 
"frameworks": { 
    "net46":{ 
    "dependencies": { 
     "Microsoft.TeamFoundationServer.Client" : "14.89.0", 
     "Microsoft.VisualStudio.Services.Client" : "14.89.0" 
    } 
    } 
} 
} 

Es scheint wie GetDefinitionAsync() Methode in der BuildHttpClienseBase Klasse enthalten. Also das Problem wäre, warum DLL laden?

var t = typeof(Microsoft.TeamFoundation.Build.WebApi.BuildHttpClientBase); 
var member = t.GetMembers(
    BindingFlags.Public | BindingFlags.NonPublic | 
    BindingFlags.Instance | BindingFlags.Static | 
    BindingFlags.DeclaredOnly 
); 

Ergebnis war

Method : CreateArtifactAsync 
Method : CreateArtifactAsync 
Method : CreateArtifactAsync 
Method : GetArtifactAsync 
Method : GetArtifactAsync 
Method : GetArtifactAsync 
Method : GetArtifactContentZipAsync 
Method : GetArtifactContentZipAsync 
Method : GetArtifactContentZipAsync 
Method : GetArtifactsAsync 
Method : GetArtifactsAsync 
Method : GetArtifactsAsync 
Method : GetBadgeAsync 
Method : DeleteBuildAsync 
Method : DeleteBuildAsync 
Method : DeleteBuildAsync 
Method : GetBuildAsync 
Method : GetBuildAsync 
Method : GetBuildAsync 
Method : GetBuildsAsync 
Method : GetBuildsAsync 
Method : GetBuildsAsync 
Method : QueueBuildAsync 
Method : QueueBuildAsync 
Method : QueueBuildAsync 
Method : UpdateBuildAsync 
Method : UpdateBuildAsync 
Method : UpdateBuildAsync 
Method : GetBuildCommitsAsync 
Method : GetBuildCommitsAsync 
Method : GetChangesBetweenBuildsAsync 
Method : GetChangesBetweenBuildsAsync 
Method : GetBuildControllerAsync 
Method : GetBuildControllersAsync 
Method : CreateDefinitionAsync 
Method : CreateDefinitionAsync 
Method : CreateDefinitionAsync 
Method : DeleteDefinitionAsync 
Method : DeleteDefinitionAsync 
Method : DeleteDefinitionAsync 
Method : GetDefinitionAsync 
Method : GetDefinitionAsync 
Method : GetDefinitionAsync 
Method : GetDefinitionsAsync 
Method : GetDefinitionsAsync 
Method : GetDefinitionsAsync 
Method : UpdateDefinitionAsync 
Method : UpdateDefinitionAsync 
Method : UpdateDefinitionAsync 
Method : GetBuildDeploymentsAsync 
Method : GetBuildDeploymentsAsync 
Method : GetBuildLogAsync 
Method : GetBuildLogAsync 
Method : GetBuildLogsAsync 
Method : GetBuildLogsAsync 
Method : GetBuildLogsZipAsync 
Method : GetBuildLogsZipAsync 
Method : GetBuildOptionDefinitionsAsync 
Method : CreateQueueAsync 
Method : DeleteQueueAsync 
Method : GetAgentPoolQueueAsync 
Method : GetQueuesAsync 
Method : GetResourceUsageAsync 
Method : GetDefinitionRevisionsAsync 
Method : GetDefinitionRevisionsAsync 
Method : GetBuildSettingsAsync 
Method : UpdateBuildSettingsAsync 
Method : AddBuildTagAsync 
Method : AddBuildTagAsync 
Method : AddBuildTagsAsync 
Method : AddBuildTagsAsync 
Method : DeleteBuildTagAsync 
Method : DeleteBuildTagAsync 
Method : GetBuildTagsAsync 
Method : GetBuildTagsAsync 
Method : GetTagsAsync 
Method : GetTagsAsync 
Method : DeleteTemplateAsync 
Method : DeleteTemplateAsync 
Method : GetTemplateAsync 
Method : GetTemplateAsync 
Method : GetTemplatesAsync 
Method : GetTemplatesAsync 
Method : SaveTemplateAsync 
Method : SaveTemplateAsync 
Method : GetBuildTimelineAsync 
Method : GetBuildTimelineAsync 
Method : GetBuildWorkItemsRefsAsync 
Method : GetBuildWorkItemsRefsAsync 
Method : GetBuildWorkItemsRefsFromCommitsAsync 
Method : GetBuildWorkItemsRefsFromCommitsAsync 
Method : GetWorkItemsBetweenBuildsAsync 
Method : GetWorkItemsBetweenBuildsAsync 
Constructor : .ctor 
Constructor : .ctor 
Constructor : .ctor 
Constructor : .ctor 
Constructor : .ctor 
NestedType : <GetArtifactContentZipAsync>d__11 
NestedType : <GetArtifactContentZipAsync>d__12 
NestedType : <GetArtifactContentZipAsync>d__13 
NestedType : <GetBuildLogAsync>d__56 
NestedType : <GetBuildLogAsync>d__57 
NestedType : <GetBuildLogsZipAsync>d__60 
NestedType : <GetBuildLogsZipAsync>d__61 
+0

Würde es Ihnen etwas ausmachen, den Inhalt Ihrer project.json und project.lock.json nach einer Wiederherstellung zu teilen? –

+0

@FabioCavalcante Sicher, ich habe aktualisiert. – guitarrapc

Antwort

1

Es mit AzureFunctions 0,2 aufgelöst.

Erfolgreich Methoden ohne Problem aufrufen.

+0

Scheint nicht vollständig behoben. Kann aber mit Stop/Start WebApps funktionieren, nicht neu starten. – guitarrapc