2017-08-11 6 views
1

Nous utilisons C# Roslyn Version 2.3.1 pour l'ouverture .csproj projets par programme.Mono: Impossible de charger le fichier ou l'assembly 'System.Threading.Tasks.Dataflow'

A cet effet, nous utilisons le code API standard suivant fourni par Roslyn pour ouvrir le .csproj et naviguer à travers chaque Microsoft.CodeAnalysis.Document pour obtenir l'arbre de syntaxe du document:

public void BrowsProjectDocuments(string projectPath) 
{ 
    var workspace = MSBuildWorkspace.Create(); 
    workspace.WorkspaceFailed += WorkSpaceFailed; 
    Project currentProject = workspace.OpenProjectAsync(projectPath).Result;  

    foreach(Document document in currentProject.Documents) 
    { 
     Task<SyntaxTree> documentSyntaxTree = document.GetSyntaxTreeAsync(); 
     ..... 
     ..... 
    } 
} 

private static void WorkSpaceFailed(object sender, WorkspaceDiagnosticEventArgs e) 
{ 
    Console.WriteLine(e.Diagnostic.Message); 
} 

Lorsque nous courons le code ci-dessus sur Windows 7 en utilisant.NET Framework 4.6.1/4.6.2 et Roslyn 2.3.1, le code fonctionne bien et nous obtenons l'arbre de syntaxe requise de chaque document.

Mais quand nous essayons d'exécuter le même code sur Ubuntu 16.04, currentProject.Documents retours nombre et nous obtenons l'erreur suivante jeté dans la WorkSpaceFailed événement accroché:

Msbuild échoué lors du traitement du fichier '/home/user/CSharp/RoslynSamples/AplModel/AplModel.csproj' avec le message: Impossible de charger le type de champ 'Microsoft.Build.Ba ckEnd.Logging.LoggingService: _loggingQueue '(20) en raison de: Impossible de charger le fichier ou l'assemblage ' System.Threading.Tasks.Dataflow, Version = 4.5.24.0, Culture = neutre, PublicKeyToken = b03f5f7f11d50a3a 'ou l'un de ses dépendances. assemblage: System.Threading.Tasks.Dataflow, Version = 4.5.24.0, Culture = neutral, PublicKeyToken = type b03f5f7f11d50a3a: membre:

Nous avons installé mono sur la machine Ubuntu en utilisant:

sudo apt-get installation mono-complète

Qu'est-ce qui manque?

Répondre

0

MSBuildWorkspace n'est pas actuellement multi plate-forme. Cela ne fonctionne que sur .net desktop clr. Mais ma connaissance du mono n'est pas très bonne, donc il est possible de l'utiliser en mono. Votre message d'erreur m'indique que vous devez inclure la bibliothèque DataFlow d'une manière ou d'une autre.

0

Regardez une solution ici: https://github.com/Microsoft/msbuild/issues/1469 Vous devez utiliser un Mono hébergé MSBuild (par exemple, prise de Mono ou construit sous Mono), et installer des paquets System.Threading.Tasks.Dataflow Microsoft.VisualStudio.RemoteControl de NuGet.