【问题标题】:Roslyn AdhocWorkspace asking for reference to System.RuntimeRoslyn AdhocWorkspace 要求参考 System.Runtime
【发布时间】:2017-11-05 19:03:22
【问题描述】:

我正在尝试对一些 C# 代码进行语义分析。 在为我的测试设置AdhocWorkspace 时,我发现了指向使用Typeobject 上的程序集位置的示例。 当我这样做时,我的诊断中出现以下错误:

[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"),

我对测试项目中的硬编码路径并不满意,但不确定如何以任何其他方式“获取”objectType 的 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.0
  • Target framework: .NET 4.6.1
  • Microsoft.CodeAnalysis.CSharp v2.4.0
  • 主项目是控制台应用程序,测试项目是常规库,PCL 也不是

【问题讨论】:

    标签: c# .net roslyn


    【解决方案1】:

    这是因为您使用的是 AdhocWorkspace。据我所知,这个工作区被设计为与 .Net 无关。含义 - 它应该适用于 .Net Standard 和 .Net Core,交叉版本。

    如果您想跳过与默认库相关的问题,最好使用MSBuildWorkspace

    但是,此工作区依赖于机器上安装的 MSBuild,以及其他一些可能导致其他问题的 MSBuild 特定的东西。喜欢:

    Msbuild 在处理文件“C:\Path\Myfile.csproj”时失败,消息为:C:\Path\packages\somepackage\build\somepackage.targets: (75, 2): The "sometask"任务已被错误地声明或使用,或在构建过程中失败。检查任务名称和程序集名称的拼写。

    如果您想坚持使用 AdHoc 工作区 - 您必须手动查找引用,方法是使用注册表查找 .Net 程序集文件夹,或者可能转向 GAC。换句话说 - 如果您想将您的解决方案中的 AdHoc 空间与 .Net 标准联系起来 - 您可以这样做,但您只能靠自己。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-12
      • 1970-01-01
      • 2020-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多