2017-08-27 85 views
6

我正在使用Visual Studio 2017附帶的默認Roslyn SDK模板。它們創建的項目的目標.NET Framework Portable。我假設Roslyn可擴展性項目可以以.NET Standard \ Core而不是Portable爲目標,並且正在尋找我可以學習的模板或Roslyn Analyzer \ Refactoring項目的樣本。需要構建針對.NET Standard Core而不是.NET Portable的Roslyn分析器

+0

這裏有什麼問題,要麼開始一個新項目並引用分析器,然後從vsix調用它,或者修改CSProj文件,並替換便攜式庫 –

+1

試過了,但它並不那麼直截了當。你知道一個我可以看一看的例子,它在哪裏成功完成? –

+0

我知道我成功工作的唯一項目就是這裏的一個,我不認爲我的公司會允許分享。但我跟着這個[回答](https://stackoverflow.com/a/23135170/1938988) –

回答

4

我開始研究一個新的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

7

從默認分析儀模板轉換的分析儀樣品可用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)。他們絕不是官方

+0

我已經下載了引用的項目,刪除了該分析儀的便攜式版本只剩下核心版本,並試圖構建它。到目前爲止,VSIX不起作用,並且塊沒有包含dll。 –

+0

我在Visual Studio 2017(15.2)中測試了vsix和nuget包,它們都工作正常。我從便攜式分析器中刪除了引用,並更新了'.csproj'文件以指向'Diagnostic.nuspec'進行打包。您現在可以通過右鍵單擊'TestAnalyzerStandard' - >'Pack'直接從Visual Studio構建nuget包。 Nuget包將出現在Debug(或Release)文件夾中。我還在'TestAnalyzerStandard \ Publish'文件夾中包含了構建的vsix擴展和nuget包,以便您可以看到我的機器上生成了什麼。 – nejcs

+0

我將不得不在稍後檢查(抱歉,現在非常忙碌)。我授予賞金。 –

相關問題