簡體   English   中英

Roslyn AdhocWorkspace要求參考System.Runtime

[英]Roslyn AdhocWorkspace asking for reference to System.Runtime

我正在嘗試對一些C#代碼進行語義分析。 在為我的測試設置AdhocWorkspace ,我發現了一些示例,指向在Typeobject上使用程序集位置。 當我這樣做時,我的診斷中出現以下錯誤:

[0]:TestIsNotInstanceOfTypeMessage.cs(13,20):錯誤CS0012:類型'Object'在未引用的程序集中定義。您必須添加對程序集'System.Runtime,Version = 4.0.0.0,Culture的引用=中立,PublicKeyToken = b03f5f7f11d50a3a'。

[1]:TestIsNotInstanceOfTypeMessage.cs(13,13):錯誤CS0012:類型'Type'在未引用的程序集中定義。您必須添加對程序集'System.Runtime,Version = 4.0.0.0,Culture的引用=中立,PublicKeyToken = b03f5f7f11d50a3a'。

當我添加以下行時一切正常:

MetadataReference.CreateFromFile(@"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\v4.6.1\\Facades\\System.Runtime.dll"),

我對測試項目中的硬編碼路徑並不滿意,但我不確定如何“獲取” object的4.6.1版本和任何其他方式Type 下面的代碼顯示了我的助手獲得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

這是因為您使用的是AdhocWorkspace。 據我所知,這個工作區旨在與.Net無關。 含義 - 它應該適用於.Net Standard和.Net Core,交叉版本。

如果您想跳過與默認庫相關的問題,那么使用MSBuildWorkspace可能會更好

但是,此工作空間依賴於在計算機上安裝MSBuild,以及其他一些可能導致其他問題的MSBuild特定事物。 喜歡:

使用以下消息處理文件'C:\\ Path \\ Myfile.csproj'時Msbuild失敗:C:\\ Path \\ packages \\ somepackage \\ build \\ somepackage.targets:(75,2):已聲明或使用“sometask”任務錯誤,或在施工期間失敗。 檢查任務名稱和程序集名稱的拼寫。

如果您想堅持AdHoc工作區 - 您必須手動找到引用,通過使用注冊表找到.Net程序集文件夾或轉向GAC。 換句話說 - 如果您想將解決方案中的AdHoc空間與.Net標准綁定 - 您可以這樣做,但您可以自己動手。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM