簡體   English   中英

在同一解決方案中使用Roslyn代碼分析器

[英]Use Roslyn code analyzer in same solution

我有一個由幾個.NET Core項目組成的解決方案。 我有一些我想要執行的代碼分析任務僅適用於此解決方案,因此將它們放在單獨的repo /解決方案中是沒有意義的。 使用適當的模板,我為分析器創建了三個項目:

  • Example.Analyzer
  • Example.Analyzer.Test
  • Example.Analyzer.Vsix

Example.Analyzer.Vsix無法編譯,因為Visual Studio需要.NET Framework,但我的目標是.NET Core以供跨平台使用。 現在,我忽略了那個項目,但我打算刪除它。 Example.Analyzer和Example.Analyzer.Test都將netcoreapp3.0與解決方案中的所有其他項目一起定位。

我寫了我的分析儀,測試通過了。 但是,我不確定如何從其他項目中實際使用這些分析儀。 我嘗試通過ProjectReference添加Example.Analyzer作為依賴項,但似乎沒有啟用分析器。

根據我的發現,有兩種方法可以為項目添加分析器支持:通過vsix或nuget包(如此處的示例 )。

將此包安裝為nuget依賴項表明存在特定屬性來標識依賴項內容的類型:

<IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>

如您所見,其中一種資產類型是分析器。 不幸的是,似乎不支持為項目依賴項設置“IncludeAssets”屬性,即使它在屬性窗格中可見。

我建議你嘗試nuget引用而不是項目引用。

要從項目中獲取nuget包,只需右鍵單擊它並選擇發布。 此外,還需要本地nuget存儲庫源代碼才能將新的nuget存儲在那里。

昨天我想為我正在研發的產品創建一套分析儀,並且在一個不同的解決方案中做這個並且放在一個私有的Nuget上是沒有意義的,所以我可以使用它們。 我找到了一個完美的解決方案:

  1. 在要分析的項目中,添加對包含分析器的項目的引用。
  2. 編輯項目文件,找到剛剛創建的ProjectReference標記,並添加屬性ReferenceOutputAssembly = falseOutputItemType = Analyzer 它看起來應該類似於:
<ProjectReference Include="..\..\analyzers\AnalyzersProject\AnalyzersProject.csproj">
  <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
  <OutputItemType>Analyzer</OutputItemType>
</ProjectReference>

這就是所需要的。 現在,只要您的解決方案構建完畢,您的新分析儀就應該可以運行。 唯一需要注意的是Visual Studio似乎會緩存分析器,因此如果您更改它,您可能需要關閉並重新打開VS以使新的/更改的分析器工作。

盡我所能,我不能完全贊成這一點。 我昨天確實非常接近這個解決方案,但是今天早上我發現了一篇博文 ,簡化了一些事情(這是我從上面得到最終解決方案的地方,我的還有一些“不必要的”線)

我在我的案例中做的一件事是利用我的項目文件夾中的“ Directory.Build.props ”文件來添加此項目引用。 這樣,在該文件夾中創建的所有項目都會自動使用我創建的分析器。

暫無
暫無

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

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