【发布时间】:2017-11-05 19:03:22
【问题描述】:
我正在尝试对一些 C# 代码进行语义分析。
在为我的测试设置AdhocWorkspace 时,我发现了指向使用Type 和object 上的程序集位置的示例。
当我这样做时,我的诊断中出现以下错误:
[0]:TestIsNotInstanceOfTypeMessage.cs(13,20):错误 CS0012:“对象”类型是在未引用的程序集中定义的。您必须添加对程序集“System.Runtime,版本=4.0”的引用。 0.0,文化=中性,PublicKeyToken=b03f5f7f11d50a3a'。
[1]:TestIsNotInstanceOfTypeMessage.cs(13,13):错误 CS0012:类型“Type”在未引用的程序集中定义。您必须添加对程序集“System.Runtime,版本=4.0”的引用。 0.0,文化=中性,PublicKeyToken=b03f5f7f11d50a3a'。
当我添加以下行时,一切正常:
MetadataReference.CreateFromFile(@"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\v4.6.1\\Facades\\System.Runtime.dll"),
我对测试项目中的硬编码路径并不满意,但不确定如何以任何其他方式“获取”object 和 Type 的 4.6.1 版本。
下面的代码显示了我的助手获取AdhocWorkspace的要点
private static readonly ImmutableArray<MetadataReference> _coreReferences =
ImmutableArray.Create<MetadataReference>(
MetadataReference.CreateFromFile(typeof(Type).Assembly.Location),
MetadataReference.CreateFromFile(typeof(object).Assembly.Location)
private static readonly Project _baseProject = new AdhocWorkspace()
.AddProject("Test", LanguageNames.CSharp)
.AddMetadataReferences(_coreReferences)
.WithCompilationOptions(new CSharpCompilationOptions(OutputKind.DynamicallyLinkedLibrary));
更多细节:
Visual Studio Community v15.4.0Target framework: .NET 4.6.1Microsoft.CodeAnalysis.CSharp v2.4.0- 主项目是控制台应用程序,测试项目是常规库,PCL 也不是
【问题讨论】: