Roslyn Analyzer'ı oluşturmanız gerekiyor Visual Studio 2017 ile birlikte gelen varsayılan Roslyn SDK şablonları kullanıyorum. Hedef .NET Framework Portable oluşturdukları projeler. Roslyn genişletilebilirlik projelerinin Portable yerine .NET Standard \ Core'u hedefleyebileceğini ve şablonlar ya da çalışabileceğim Roslyn Analyzer \ Refactoring projesinin bir örneğini aradığım var..NET Standard Core yerine .NET Taşınabilir
cevap
Yeni bir Roslyn projesi üzerinde çalışmaya başladım ve şablonları kullanmak yerine işleri tek tek oluşturdum. https://github.com/IKoshelev/Roslyn.AutoLogging/commit/1f88e3e49141e0fa425c51fdcb3457a7c3d6dcaa
Aşağıdaki hedeflemenin başardı: - NET Standard 1.3 (dağıtılacak bu .dll, sürüm minimumda tutulması)
unittests projesi -
Refactoring projesi NET Çekirdek 2.0
VSIX proje - .NET Framework 4.6 (sorun olur bu yüzden, sadece tam Visual Studio VSIX destekler inanmak)
Güncelleme Roslyn Sürüm Şu anda biraz daha karmaşık, yani, uzantılarınızı Visual Studio 2015 ile kullanmak istiyorsanız PCL kitaplıklarını kullanmanız gerekecek.Bu makalenin sonundaki bilgiler: article on Roslyn
Varsayılan analizör şablonundan dönüştürülen analizör örneği kullanılabilir here. .NET standardını hedefleyen TestAnalyzerStandard
ile karşılaştırmak için orijinal analizör var.
Adımlar çalışması için:
- NET Standard 1.3 hedeflemelidir yeni NET Standard kütüphaneye
- kitaplığı oluşturun. Analizörü VS içinde uzantı olarak çalıştırmak istiyorsanız bu gereklidir (uzantılar, .NET 4.6'yı hedefler). Standart sürümler ve tam çerçeve sürümleri arasında haritalama mevcuttur here. Ayrıca, 1.3'ten daha düşük bir sürümü hedeflemeye çalışırsanız, gerekli analizör paketlerini ekleyemezsiniz.
Microsoft.Composition
son sürümü için nuget paketi ekleyin. Bu,Microsoft.CodeAnalysis.CSharp.Workspaces
tarafından gereklidir. İlk önce çalışma alanlarını eklemeye çalışırsanız, başvurulan kompozisyon paketinin uyumlu olmadığını belirten bir hata alırsınız.Microsoft.CodeAnalysis.CSharp
için Nuget paketi ekleyin (ben kullanıyorum son 1. * sürüm)- (
Microsoft.CodeAnalysis.CSharp
sürümünü eşleşmesi gerekir sürümü)Microsoft.CodeAnalysis.Csharp.Workspaces
için paket Nuget ekleyin. - Bu noktada, taşınabilir projeden kod kopyalayabilir ve oluşturabilirsiniz. Hata olmamalıdır (VS hala kırmızı dalgalı çizgiler gösteriyorsa, çözümü kapatıp tekrar açmanız gerekebilir).
- sadece
nuget pack Diagnostic.nuspec .
yürütmek paketi .nuget oluşturmak için standart kütüphaneye .NET için varlıkları sekmesi ve değişim referans gidin sadecesource.extension.vsixmanifest
açın VS uzatma çalışmaları yapmak.Diagnostic.nuspec
, Nuget 2.x için geçerlidir. VS 2017'de paket yönetim konsolu aracılığıyla nuget kullanıyorsanız,<file src="*.dll" ..."
'u<file src="bin\*\netstandard1.3\*.dll" ...
olarak değiştirmeniz gerekecektir.
Bu adımlar, analizörlerle yaptığım deneyimin bir sonucudur (daha önce portatif kitaplık olmak yerine tam çerçeveyi hedefleyen DLL oluştururken daha önce oynamıştım). Hiçbir şekilde resmi tarafından bulunmazlar.
başvurulan projeyi indirilen kaldırıldı Analizörün taşınabilir versiyonu sadece çekirdek versiyonunu bırakarak oluşturmaya çalıştı. Şimdiye kadar, VSIX çalışmıyor ve nugget pakette dll içermiyor. –
Visual Studio 2017'de (15.2) hem vsix hem de nuget paketlerini test ediyordum ve ikisi de iyi çalışıyordu. Taşınabilir analizciden referansları kaldırdım ve '.csproj' dosyasının güncellendiğini, paket için 'Diagnostic.nuspec' 'i işaret ettim. Artık 'TestAnalyzerStandard' -> 'Pack' 'i tıklayarak nuget paketini doğrudan Visual Studio'dan kurabilirsiniz. Nuget paketi Debug (veya Release) klasöründe bulunacaktır. Ben de testAnalyzerStandard \ Publish' klasöründe yerleşik vsix uzantısı ve nuget paketi dahil, böylece makinemde üretilen ne olduğunu görebilirsiniz. – nejcs
Daha sonra kontrol etmem gerekecek (üzgünüm, şimdi çok yüklü). Ödülünü ben verdim. –
Sorununuz burada, ya yeni bir proje başlatıp analizörlere referans verin, ve sonra vsix'inizden birini arayın ya da CSProj dosyasını değiştirin ve Portable kitaplıklarını değiştirin –
Bunu denedi, ama bu doğru değil. Bunun başarılı bir şekilde yapıldığı bir örnek projeyi biliyor musunuz? –
Başarıyla çalıştığımı bildiğim tek proje, şirketimin paylaşıma izin vereceğini düşünmüyorum. ama ben bu [cevap] ile takip ettim (https://stackoverflow.com/a/23135170/1938988) –