[英]Use Roslyn code analyzer in same solution
我有一個由幾個.NET Core項目組成的解決方案。 我有一些我想要執行的代碼分析任務僅適用於此解決方案,因此將它們放在單獨的repo /解決方案中是沒有意義的。 使用適當的模板,我為分析器創建了三個項目:
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上是沒有意義的,所以我可以使用它們。 我找到了一個完美的解決方案:
<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.