Msbuild 如何使用roslyn构建和现有解决方案,并解析csproj中的所有引用,以便解析所有类型
我有一个解决方案,当我用roslyn加载它时,它内置于vs中,如下所示:Msbuild 如何使用roslyn构建和现有解决方案,并解析csproj中的所有引用,以便解析所有类型,msbuild,roslyn,Msbuild,Roslyn,我有一个解决方案,当我用roslyn加载它时,它内置于vs中,如下所示: var workspace = MSBuildWorkspace.Create(); var solutionPath = @"c:\path\to\my.sln"; var solution = workspace.OpenSolutionAsync(solutionPath).Result; 那么所有项目都有0个元数据引用 如果我尝试从引用的程序集获取类型,如下所示: var compilation = soluti
var workspace = MSBuildWorkspace.Create();
var solutionPath = @"c:\path\to\my.sln";
var solution = workspace.OpenSolutionAsync(solutionPath).Result;
那么所有项目都有0个元数据引用
如果我尝试从引用的程序集获取类型,如下所示:
var compilation = solution.Projects.First().GetCompilationAsync().Result;
var myType = compilation.GetTypeByMetadataName("SomeTypeNanme);
var project = project.AddMetadataReference(AssemblyContaningTheType);
它从未找到类型。如果我手动添加如下元数据引用:
var compilation = solution.Projects.First().GetCompilationAsync().Result;
var myType = compilation.GetTypeByMetadataName("SomeTypeNanme);
var project = project.AddMetadataReference(AssemblyContaningTheType);
然后它可以找到类型
我的解决方案以.NET Framework 4.5.2为目标,以防出现问题
这是解析引用(即手动添加元数据引用)的唯一方法吗?难道不能通过参考文献都在csproj中这一事实来实现吗?我怎样才能知道我需要添加哪些参考资料
理想情况下,我希望自动解析引用,但可以使用指针从项目文件中的信息构建所有必要的元数据引用…据我所知,它可能与相关,或者可能导致 引用后者 引用来自同一解决方案的其他项目的项目的空MetadataReferences 使用的版本: 2.7.0 复制步骤:
所以我终于有时间再看一次。对我来说,解决方案来自以下要点: 这基本上强制使用MSBuild的一致版本 首先添加对Microsoft.Build.Locator的引用(它说它适用于MSBuild 15,但我适用于MSBuild 16) 然后添加以下行:
MSBuildLocator.RegisterDefaults()代码>
在启动过程中的某个地方,在使用msbuild Workspace打开解决方案之前。现在无法编辑文本以获得更好的格式,编辑器一直告诉我一些代码格式不好:-/我会试试,但我使用的是文章中提到的特定msbuild Workspace包,该包声称已修复此问题。我会更新这个问题,让它更清楚,一个在公开票证中的链接让我找到了一个解决方案,我把它作为一个答案发布了出来。谢谢。很高兴你能来!我几乎从未使用过MS VS,当然也从未以这种方式使用过,我只是收集了一些考虑到您的问题而想到使用的参考资料^?另请参阅以下关于MSBuildWorkspace
可能需要的某些绑定重定向的答案: