我有一个内置的解决方案,当我用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/32cd69d04ea1c08a16ae5c4cd21dd3a3
这基本上会强制使用一致的MSBuild版本。
首先添加对Microsoft.Build.Locator的引用(它说它适用于MSBuild 15,但对我来说适用于16)。
然后添加以下行:
MSBuildLocator.RegisterDefaults();
在使用MSBuildWorkspace打开解决方案之前,在引导程序中的某个位置进行操作。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句