[英]Roslyn AdhocWorkspace asking for reference to System.Runtime
我正在嘗試對一些C#代碼進行語義分析。 在為我的測試設置AdhocWorkspace
,我發現了一些示例,指向在Type
和object
上使用程序集位置。 當我這樣做時,我的診斷中出現以下錯誤:
[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
這是因為您使用的是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.