Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/270.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用Roslyn';什么是OpenSolutionAsync?_C#_Roslyn - Fatal编程技术网

C# 如何使用Roslyn';什么是OpenSolutionAsync?

C# 如何使用Roslyn';什么是OpenSolutionAsync?,c#,roslyn,C#,Roslyn,我正在尝试使用OpenSolutionAsync打开RoslynLight.sln,然后迭代所有项目。出于我的目的,我需要一个语义模型和解析的引用。通过这两种方法的结合,我得出了这个局部解决方案: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Microsoft.CodeAnalysis; using

我正在尝试使用OpenSolutionAsync打开RoslynLight.sln,然后迭代所有项目。出于我的目的,我需要一个语义模型和解析的引用。通过这两种方法的结合,我得出了这个局部解决方案:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.MSBuild;
using System.IO;

namespace OpenRoslyn
{
  class Program
  {
    static void Main(string[] args)
    {

      var msbw = MSBuildWorkspace.Create();
      var sln = msbw.OpenSolutionAsync(@"C:\Users\carr27\Documents\GitHub\roslyn\src\RoslynLight.sln").Result;
      //var proj = sln.Projects.First(x => x.Name == "CodeAnalysis.Desktop");
      var messages = new List<string>();
      foreach (var p in sln.Projects)
      {
        Console.WriteLine(p.FilePath);
        messages.Add(p.FilePath);
        var facadesDir = @"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6\Facades\";
        var proj = p.AddMetadataReference(MetadataReference.CreateFromAssembly(typeof(object).Assembly));
        proj = proj.AddMetadataReference(MetadataReference.CreateFromFile(facadesDir + "System.Runtime.dll"));
        proj = proj.AddMetadataReference(MetadataReference.CreateFromFile(facadesDir + "System.Runtime.Extensions.dll"));
        proj = proj.AddMetadataReference(MetadataReference.CreateFromFile(facadesDir + "System.IO.dll"));
        proj = proj.AddMetadataReference(MetadataReference.CreateFromFile(facadesDir + "System.Threading.Tasks.dll"));
        proj = proj.AddMetadataReference(MetadataReference.CreateFromFile(facadesDir + "System.Text.Encoding.dll"));
        proj = proj.AddMetadataReference(MetadataReference.CreateFromFile(facadesDir + "System.Reflection.dll"));
        try
        {
          var cu = proj.GetCompilationAsync().Result;
          // here I would do useful work, but for know I just get diagnostics
          foreach (var e in cu.GetDiagnostics().Where(x => x.Severity == DiagnosticSeverity.Error))
          {
            Console.WriteLine("{0}: {1}", e.Location, e.GetMessage());
            messages.Add(String.Format("{0}: {1}", e.Location, e.GetMessage()));
          }
        }
        catch (AggregateException e)
        {
          foreach(var ie in e.InnerExceptions)
          {
            Console.WriteLine(ie.Message);
            messages.Add(ie.Message);
          }

        }
        catch (Exception e)
        {
            Console.WriteLine(e.Message);
            messages.Add(e.Message);
        }
      }
      File.WriteAllLines("log.txt", messages);
      Console.WriteLine("done.");
      Console.ReadKey();
    }
  }
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
使用System.Threading.Tasks;
使用Microsoft.CodeAnalysis;
使用Microsoft.CodeAnalysis.MSBuild;
使用System.IO;
名称空间OpenRoslyn
{
班级计划
{
静态void Main(字符串[]参数)
{
var msbw=MSBuildWorkspace.Create();
var sln=msbw.OpenSolutionAsync(@“C:\Users\carr27\Documents\GitHub\roslyn\src\RoslynLight.sln”)。结果;
//var proj=sln.Projects.First(x=>x.Name==“CodeAnalysis.Desktop”);
var messages=新列表();
foreach(sln.项目中的var p)
{
Console.WriteLine(p.FilePath);
messages.Add(p.FilePath);
var facadesDir=@“C:\Program Files(x86)\Reference Assembly\Microsoft\Framework\.NETFramework\v4.6\Facades\”;
var proj=p.AddMetadataReference(MetadataReference.CreateFromAssembly(typeof(object.Assembly));
proj=proj.AddMetadataReference(MetadataReference.CreateFromFile(facadesDir+“System.Runtime.dll”);
proj=proj.AddMetadataReference(MetadataReference.CreateFromFile(facadesDir+“System.Runtime.Extensions.dll”);
proj=proj.AddMetadataReference(MetadataReference.CreateFromFile(facadesDir+“System.IO.dll”);
proj=proj.AddMetadataReference(MetadataReference.CreateFromFile(facadesDir+“System.Threading.Tasks.dll”);
proj=proj.AddMetadataReference(MetadataReference.CreateFromFile(facadesDir+“System.Text.Encoding.dll”);
proj=proj.AddMetadataReference(MetadataReference.CreateFromFile(facadesDir+“System.Reflection.dll”);
尝试
{
var cu=proj.GetCompilationAsync().Result;
//在这里,我会做一些有用的工作,但我知道我只是得到诊断
foreach(cu.GetDiagnostics()中的变量e,其中(x=>x.Severity==DiagnosticSeverity.Error))
{
WriteLine(“{0}:{1}”,e.Location,e.GetMessage());
Add(String.Format(“{0}:{1}”,e.Location,e.GetMessage());
}
}
捕获(聚合异常e)
{
foreach(e.InnerExceptions中的变量ie)
{
控制台写入线(即消息);
消息。添加(即消息);
}
}
捕获(例外e)
{
控制台写入线(e.Message);
messages.Add(e.Message);
}
}
writeAllines文件(“log.txt”,消息);
控制台。WriteLine(“完成”);
Console.ReadKey();
}
}
}
这个程序的日志太大了,我无法发布,但解决方法只适用于某些项目。例如,rosyln\src\compilers\Core\Desktop\CodeAnalysis.Desktop.csproj没有错误,但roslyn\src\compilers\CSharp\Portable\CSharpCodeAnalysis.csproj有:

None: Multiple assemblies with equivalent identity have been imported: 'C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETPortable\v4.5\Profile\Profile7\System.Threading.Tasks.dll' and 'C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6\Facades\System.Threading.Tasks.dll'. Remove one of the duplicate references.
None: Multiple assemblies with equivalent identity have been imported: 'C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETPortable\v4.5\Profile\Profile7\System.Text.Encoding.dll' and 'C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6\Facades\System.Text.Encoding.dll'. Remove one of the duplicate references.
None: Multiple assemblies with equivalent identity have been imported: 'C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETPortable\v4.5\Profile\Profile7\System.Runtime.Extensions.dll' and 'C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6\Facades\System.Runtime.Extensions.dll'. Remove one of the duplicate references.
None: Multiple assemblies with equivalent identity have been imported: 'C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETPortable\v4.5\Profile\Profile7\System.Runtime.dll' and 'C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6\Facades\System.Runtime.dll'. Remove one of the duplicate references.
None: Multiple assemblies with equivalent identity have been imported: 'C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETPortable\v4.5\Profile\Profile7\System.Reflection.dll' and 'C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6\Facades\System.Reflection.dll'. Remove one of the duplicate references.
None: Multiple assemblies with equivalent identity have been imported: 'C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETPortable\v4.5\Profile\Profile7\System.IO.dll' and 'C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6\Facades\System.IO.dll'. Remove one of the duplicate references.
SourceFile(C:\Users\carr27\Documents\GitHub\roslyn\src\Compilers\CSharp\Portable\BoundTree\UnboundLambda.cs[9068..9109)): The type 'ConcurrentDictionary<TKey, TValue>' exists in both 'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' and 'System.Collections.Concurrent, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'
SourceFile(C:\Users\carr27\Documents\GitHub\roslyn\src\Compilers\CSharp\Portable\BoundTree\UnboundLambda.cs[9203..9250)): The type 'ConcurrentDictionary<TKey, TValue>' exists in both 'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' and 'System.Collections.Concurrent, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'
None:已导入具有等效标识的多个程序集:“C:\Program Files(x86)\Reference Assembly\Microsoft\Framework\.NETPortable\v4.5\Profile\Profile7\System.Threading.Tasks.dll”和“C:\Program Files(x86)\Reference Assembly\Microsoft\Framework\.NETFramework\v4.6\Facades\System.Threading.Tasks.dll”。删除其中一个重复引用。
无:已导入具有等效标识的多个程序集:“C:\Program Files(x86)\Reference Assembly\Microsoft\Framework\.NETPortable\v4.5\Profile\Profile7\System.Text.Encoding.dll”和“C:\Program Files(x86)\Reference Assembly\Microsoft\Framework\.NETFramework\v4.6\Facades\System.Text.Encoding.dll”。删除其中一个重复引用。
无:已导入具有等效标识的多个程序集:“C:\Program Files(x86)\Reference Assembly\Microsoft\Framework\.NETPortable\v4.5\Profile\Profile7\System.Runtime.Extensions.dll”和“C:\Program Files(x86)\Reference Assembly\Microsoft\Framework\.NETFramework\v4.6\Facades\System.Runtime.Extensions.dll”。删除其中一个重复引用。
无:已导入具有等效标识的多个程序集:“C:\Program Files(x86)\Reference Assembly\Microsoft\Framework\.NETPortable\v4.5\Profile\Profile7\System.Runtime.dll”和“C:\Program Files(x86)\Reference Assembly\Microsoft\Framework\.NETFramework\v4.6\Facades\System.Runtime.dll”。删除其中一个重复引用。
无:已导入具有等效标识的多个程序集:“C:\Program Files(x86)\Reference Assembly\Microsoft\Framework\.NETPortable\v4.5\Profile\Profile7\System.Reflection.dll”和“C:\Program Files(x86)\Reference Assembly\Microsoft\Framework\.NETFramework\v4.6\Facades\System.Reflection.dll”。删除其中一个重复引用。
无:已导入具有等效标识的多个程序集:“C:\Program Files(x86)\Reference Assembly\Microsoft\Framework\.NETPortable\v4.5\Profile\Profile7\System.IO.dll”和“C:\Program Files(x86)\Reference Assembly\Microsoft\Framework\.NETFramework\v4.6\Facades\System.IO.dll”。删除其中一个重复引用。
源文件(C:\Users\carr27\Documents\GitHub\roslyn\src\Compilers\CSharp\Portable\BoundTree\UnboundLambda.cs[9068..9109]:类型“ConcurrentDictionary”同时存在于“mscorlib,Version=4.0.0.0,Culture=中立,PublicKeyToken=b77a5c561934e089”和“System.Collections.Concurrent,Version=4.0.0.0,Culture=中立,PublicKeyToken=b03f5f7f11d50a3a”中
源文件(C:\Users\carr27\Documents\GitHub\roslyn\src\Compilers\CSharp\Portable\BoundTree\UnboundLambda.cs[9203..9250]:类型“ConcurrentDictionary”存在于“mscorlib,Version=4.0.0.0,Culture=中立,PublicKeyToken=b77a5c561934e089”和“System.Collections.Concurrent,Version=4.0.0.0,Culture=中立,PublicKeyToken=b03f5f7f11d50a3a”中
…还有很多其他的。在我看来,这是我所能做到的
MSBuildWorkspace.Create();
MSBuildWorkspace.Create(new Dictionary<string, string> { { "CheckForSystemRuntimeDependency", "true" } });