我正在使用Visual Studio 2017附帶的默認Roslyn SDK模板。它們創建的項目的目標.NET Framework Portable。我假設Roslyn可擴展性項目可以以.NET Standard \ Core而不是Portable爲目標,並且正在尋找我可以學習的模板或Roslyn Analyzer \ Refactoring項目的樣本。需要構建針對.NET Standard Core而不是.NET Portable的Roslyn分析器
回答
我開始研究一個新的Roslyn項目,並逐個建立了一些東西,而不是使用模板。 https://github.com/IKoshelev/Roslyn.AutoLogging/commit/1f88e3e49141e0fa425c51fdcb3457a7c3d6dcaa
我總算有以下目標:
重構項目 - .NET標準1.3(這個.dll將被分發,版本保持在最低限度)
單元測試項目 - .NET核2.0
VSIX項目 - .NET框架4.6(我相信,只有完整的Visual Studio支持VSIX,所以這是好的)
更新版本羅斯林的現在有點複雜了,即如果你想在Visual Studio 2015中使用你的擴展,你將不得不使用PCL庫。本文結尾處的更多信息article on Roslyn
從默認分析儀模板轉換的分析儀樣品可用here。有用於比較的原始分析器以及針對.NET標準的TestAnalyzerStandard
。
步驟,使其工作:
- 創建新的.NET標準庫
- 圖書館必須針對.NET 1.3標準。如果您希望將分析器作爲VS內的擴展運行(擴展目標.NET 4.6),則這是必需的。標準版本和完整框架版本之間的映射可用here。此外,如果您嘗試定位低於1.3的版本,您將無法包含所需的分析器軟件包。
- 添加nuget包爲
Microsoft.Composition
最新版本。這需要Microsoft.CodeAnalysis.CSharp.Workspaces
。如果您嘗試首先添加工作區,則會出現引用的組合包不兼容的錯誤。 - 添加的NuGet包
Microsoft.CodeAnalysis.CSharp
(我使用的是最新的1. *版本) - 添加的NuGet包
Microsoft.CodeAnalysis.Csharp.Workspaces
(版本應該匹配的Microsoft.CodeAnalysis.CSharp
版本)。 - 此時您可以從便攜式項目複製代碼並構建它。應該沒有錯誤(如果VS仍然顯示紅色波形,則可能必須關閉並重新打開解決方案)。
- 爲了使VS推廣工作,剛打開
source.extension.vsixmanifest
,去資產標籤和更改參考.NET標準庫 - 創建.nuget包只執行
nuget pack Diagnostic.nuspec .
。Diagnostic.nuspec
適用於Nuget 2.x.如果您在VS 2017中通過包管理控制檯使用nuget,則必須將<file src="*.dll" ..."
更改爲<file src="bin\*\netstandard1.3\*.dll" ...
。
這些步驟是我使用分析器進行實驗的結果(我以前使用的是創建針對完整框架而不是便攜庫的DLL)。他們絕不是官方。
我已經下載了引用的項目,刪除了該分析儀的便攜式版本只剩下核心版本,並試圖構建它。到目前爲止,VSIX不起作用,並且塊沒有包含dll。 –
我在Visual Studio 2017(15.2)中測試了vsix和nuget包,它們都工作正常。我從便攜式分析器中刪除了引用,並更新了'.csproj'文件以指向'Diagnostic.nuspec'進行打包。您現在可以通過右鍵單擊'TestAnalyzerStandard' - >'Pack'直接從Visual Studio構建nuget包。 Nuget包將出現在Debug(或Release)文件夾中。我還在'TestAnalyzerStandard \ Publish'文件夾中包含了構建的vsix擴展和nuget包,以便您可以看到我的機器上生成了什麼。 – nejcs
我將不得不在稍後檢查(抱歉,現在非常忙碌)。我授予賞金。 –
- 1. 針對.NET Core 2.0
- 2. .NET Core - 針對舊的.net框架
- 3. 在我的.Net Core 2.0項目中,使用.Net FW包而不是.Net Standard(警告NU1701)
- 4. Roslyn分析器,打破構建vs2015
- 5. 用Roslyn和.NET Core生成C#代碼
- 6. 已安裝.NET Core SDK,但.NET Core VS2015不會安裝?需要嗎?
- 7. .NET Framework 4.6.2和.NET Standard 2.0不兼容
- 8. 在.NET Standard/Core中獲取構造函數列表的等價物是什麼?
- 9. 用於.NET Core的新.csproj格式的Roslyn工作空間
- 10. SonarQube構建.NET Core 2.0失敗
- 11. Jenkins的Roslyn分析器
- 12. Roslyn分析器對象初始化器
- 13. .NET Portable Framework中的System.Drawing.Bitmap
- 14. 在TFS上構建.NET Core的構建依賴性問題
- 15. 在Travis CI上構建.NET Core 2.0
- 16. C#7,.Net標準,PCL,.Net Core和.Net之間的差異4.7
- 17. .net core - 數據庫url解析器
- 18. 在Net Core中解析pdf
- 19. 是否可以使用COM可見類型構建.NET DLL,而不需要VS需要提升?
- 20. 詞法分析器需要「不」而不是「不喜歡」
- 21. .Net Core v。1.1.0找不到
- 22. .NET線程 - 是鎖定需要分配
- 23. 什麼是最強大的.NET YAML解析器和構建器?
- 24. 是否有.NET 4.0的CLR分析器?
- 25. .NET Core == .Net Framework 5?
- 26. 創建長期運行的針對Linux Docker容器的.NET Core服務
- 27. 更新後不能構建.NET Core項目
- 28. 對於.net 5或.net Core 1.0,ResponseCache:GetVaryByCustomString?
- 29. 參考CommonServiceLocator .NET Standard 1.4上的Nuget
- 30. ClickOnce應用程序要求使用.NET 2.0構建時需要.NET 3.5
這裏有什麼問題,要麼開始一個新項目並引用分析器,然後從vsix調用它,或者修改CSProj文件,並替換便攜式庫 –
試過了,但它並不那麼直截了當。你知道一個我可以看一看的例子,它在哪裏成功完成? –
我知道我成功工作的唯一項目就是這裏的一個,我不認爲我的公司會允許分享。但我跟着這個[回答](https://stackoverflow.com/a/23135170/1938988) –