如何使用roslyn构建和现有解决方案,并解析csproj中的所有引用,以便可以解析所有类型

山姆·霍尔德

我有一个内置的解决方案,当我用roslyn加载它时,就像这样:

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);

然后可以找到类型。

我的解决方案针对.NET Framework 4.5.2,以防万一。

这是解析引用的唯一方法,即手动添加元数据引用吗?通过引用全部在csproj中这一事实不能做到吗?我怎么知道需要添加什么参考?

理想情况下,我希望引用能够自动解析,但是可以通过指针从项目文件中的信息中构建所有必要的元数据引用。

山姆·霍尔德

所以我终于绕过去了。对我来说,解决方案是基于以下要点:

https://gist.github.com/DustinCampbell/32cd69d04ea1c08​​a16ae5c4cd21dd3a3

这基本上会强制使用一致的MSBuild版本。

首先添加对Microsoft.Build.Locator的引用(它说它适用于MSBuild 15,但对我来说适用于16)。

然后添加以下行:

MSBuildLocator.RegisterDefaults();

在使用MSBuildWorkspace打开解决方案之前,在引导程序中的某个位置进行操作。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Roslyn获取所有解决方案项目参考

使用Cake(C#make)在树中构建所有解决方案?

使用Roslyn在Visual Studio解决方案中查找所有引用

如何获得拓扑排序的所有解决方案

使用minisat查找SAT的所有解决方案

如何使用roslyn删除c#解决方案中源代码的所有注释?

Anaconda 无法打开,所有现有解决方案都不起作用

如何使Gurobi(使用R)显示所有解决方案

如何解析json对象,以便可以正确获取所有值

N皇后不打印所有解决方案

TFS无法获取所有解决方案文件

使用Roslyn访问和修改解决方案中的所有文档

如何通过Django渠道共享文件,现在有不完整的解决方案,例如S3存储桶中的所有解决方案

如何获得解决方案项目中的所有类型?

C#VisualStudio 2015如何从现有解决方案到新解决方案中使用代码

找到所有解决方案后,如何对解决方案进行评分并选择一种

使用VB.NET,如何将现有解决方案中的现有项目引入新解决方案中,从而使其完全驻留在新解决方案中?

如何为所有解决方案将EditorConfig文件导入Visual Studio?

查找Python所有解决方案列表中是否存在电位的最快方法

使用\ n \以矩阵形状打印所有解决方案

试图在python中使用Z3查找布尔公式的所有解决方案

Prolog-谓词在不使用输入变量时无法找到所有解决方案

如何在解决方案中运行所有测试

如何使用Roslyn的OpenSolutionAsync解决所有引用?

是否可以使用反射从 mstest 解决方案 dll 中获取所有测试类别?

使用现有的线性编程工具查找所有替代基本解决方案

如何在Roslyn的解决方案中找到MethodDeclarationSyntax的所有用法

没有项目\ bin \配置的所有解决方案输出的MSBuild复制任务

检查完所有解决方案后如何解决“ TypeError:网络请求失败”错误?