【发布时间】:2016-09-23 01:10:09
【问题描述】:
当 Roslyn 加载缺少程序集引用的项目时,我不知道如何得到错误。引用将在 csproj 文件中,如下所示:
<ItemGroup>
<Reference Include="SomeLibrary" />
</ItemGroup>
如果 SomeLibrary 存在,语义树将正确加载,并且类型将位于其适当的命名空间中。如果 SomeLibrary 不存在,Roslyn 似乎会继续它的快乐方式,只是假设全局命名空间中存在任何缺失的类型。如何让 Roslyn 报告此错误?
我已经包含了一些代码 sn-ps 以获得更多上下文:
MSBuildWorkspace workspace = MSBuildWorkspace.Create();
workspace.LoadMetadataForReferencedProjects = true;
workspace.SkipUnrecognizedProjects = false;
Project project = workspace.OpenProjectAsync("SomeProject.csproj").Result;
// Project loads no problem, even though a referenced assembly is missing...help
【问题讨论】:
-
我们开始为此创建一个 API,但尚未最终确定,如您所见 here。尽管需要做一些额外的工作才能将其连接到 MSBuildWorkspace。您可以提交错误以至少跟踪请求。
-
对于编译错误已经存在的项目错误使用相同的 API 怎么样? GetDiagnostics?
-
我们将它们分开,因为如果有项目错误,则可能意味着编译错误毫无意义,在这种情况下根本不计算它们会便宜很多。
-
我的意思是在 Project 类中添加一个 GetDiagnostics 方法。如果项目文件中有错误,我想向用户打印有关项目错误的详细信息,而不仅仅是失败而没有错误消息。如果项目中错误的 api 与文档中的错误相同,这也有助于保持一致性。