2017-09-30 8 views
0

MSBuildWorkspaceは、アプリケーションのビルドに使用しているコンピュータ以外のコンピュータ上のドキュメントを表示するようになりました。Roslyn/MSBuildWorkspaceが非Devコンピュータ上のドキュメントをロードしない

私はRoslyn workspace for .NET Core's new .csproj formatを見たことがありますが、私の場合は開発用コンピュータで問題なく動作していますが、別のコンピュータの同じプロジェクトでは空です。

私はなぜ開発用コンピュータでは動作しますが、他のコンピュータでは動作しないのか分かりません...?

これはコードです:

public static IReadOnlyList<CodeFile> ReadSolution(string path) 
    { 
     List<CodeFile> codes = new List<CodeFile>(); 
     using (MSBuildWorkspace workspace = MSBuildWorkspace.Create()) 
     { 
      var solution = workspace.OpenSolutionAsync(path).Result; 
      foreach (var project in solution.Projects) 
      { 
       //project.Documents.Count() is 0 
       foreach (var doc in project.Documents) 
       { 
        if (doc.SourceCodeKind == SourceCodeKind.Regular) 
        { 
         StringBuilder sb = new StringBuilder(); 
         using (var sw = new StringWriter(sb)) 
         { 
          var source = doc.GetTextAsync().Result; 
          source.Write(sw); 
          sw.WriteLine(); 
         } 

         codes.Add(new CodeFile(doc.FilePath, sb.ToString())); 
        } 
       } 
      } 
     } 
     return codes; 
    } 
+0

MSBuildのワークスペースが動作するためにMSBuildのインストールおよびCSHARP/VBのためのすべての必要なのMSBuildタスクファイルを必要とします。おそらく、開発者コマンドプロンプト(msbuild.exeも動作する場所)で実行されるアプリケーションでのみ動作します。また、msbuild.exe.configにあるすべてのバインディングリダイレクトを自分のapp.confgに含める必要があります。 –

答えて

0

それはMSBuildWorkspaceの新しいバージョンが全くなく長いイベント、WorkspaceFailureを高め、障害の例外をスローしないことが判明します。 (https://github.com/dotnet/roslyn/issues/15056

これは、必要なビルドツール(v15/VS2017)が利用できなかったことを示しています。新しい2017ビルドツールインストーラは、エンドユーザーにとっては複雑すぎるだけでなく、2015ビルドツールインストーラよりもインストールがずっと遅いです。

は、その代わりに、私はその依存関係を避けるために、このあまり堅牢な方法を思い付いた:

public static IReadOnlyList<CodeFile> ReadSolution(string path) 
    { 
     List<CodeFile> codes = new List<CodeFile>(); 

     var dirName = System.IO.Path.GetDirectoryName(path); 
     var dir = new DirectoryInfo(dirName); 
     var csProjFiles = dir.EnumerateFiles("*.csproj", SearchOption.AllDirectories); 
     foreach(var csProjFile in csProjFiles) 
     { 
      var csProjPath = csProjFile.Directory.FullName; 
      using (var fs = new FileStream(csProjFile.FullName, FileMode.Open, FileAccess.Read)) 
      { 
       using (var reader = XmlReader.Create(fs)) 
       { 
        while(reader.Read()) 
        { 
         if(reader.Name.Equals("Compile", StringComparison.OrdinalIgnoreCase)) 
         { 
          var fn = reader["Include"]; 
          var filePath = Path.Combine(csProjPath, fn); 
          var text = File.ReadAllText(filePath); 
          codes.Add(new CodeFile(fn,text)); 
         } 
        } 
       } 
      } 
     } 
     return codes; 
    } 
+0

MSBuildを使用してプロジェクトファイルを実行しないと、生成されたファイルや正しい参照のセットについてはわかりません。 –

関連する問題