2013-07-29 13 views
6

Visual Studio 2010'dan Visual Studio 2012'ye özel FxCop (= Kod Analizi) kurallarımızı geçirmeye çalışıyorum.FxCop özel kurallarının VS2012'de bir adı yok (ancak "resmi" kuralların bir adı var)

:

Şimdiye kadar, onlar bir şey hariç iyi çalışır: adı Microsoft'un kuralları için gösterilen iken (>Code Analysis - ->Other windowsView), sadece CheckId ve Resolution, göstermek isimlerini sonuçları penceresinde boştur

The name isn't visible on the right of the CheckId on the custom rule, but is visible on the Microsoft rule.

stran nedir

The name is visible on both rules in the ruleset editor

benim kurallarıma nesi var: ge, adı ruleset editörü görünür olmasıdır?

Detaylar

İşte

iki kural MsBuild en çıkışında göstermek nasıl (balık orada bir şey var, ama farklı bir mesajım var neden anlamıyorum):

İşte
6>c:\Users\Me\MySolution\MyProject\Program.cs(15): warning : CA1804 : Microsoft.Performance : 'Foo<T>.SomeMethod()' declares a variable, 'z', of type 'int', which is never used or is only assigned to. Use this variable or remove it. 
6>MSBUILD : warning : CF1001 : CustomRules.ThreadSafety : The public Public Field "Tests.Program.Foo" must be preceded of readonly 

olduğunu

<?xml version="1.0" encoding="utf-8" ?> 
<Rules FriendlyName="CustomRules"> 
    <Rule TypeName="PublicFieldsMustBeReadonly" Category="CustomRules.ThreadSafety" CheckId="CF1001"> 
    <Name>Public Fields must be readonly or must be replaced with a Getter/Setter Method.</Name> 
    <Description>Public Fields must be readonly or must be replaced with a Getter/Setter Method.</Description> 
    <GroupOwner>MyCompany</GroupOwner> 
    <DevOwner>Me</DevOwner> 
    <Owner>Me</Owner> 
    <Url>http://example.com</Url> 
    <Resolution>The public Public Field "{0}" must be preceded of readonly</Resolution> 
    <Email>[email protected]</Email> 
    <MessageLevel Certainty="100">Warning</MessageLevel> 
    <FixCategories>Breaking</FixCategories> 
    </Rule> 
</Rules> 

Ve burada Microsoft'un kural için XML kural beyanıdır: my kural için XML dosyasında beyanı kural.

<Rules FriendlyName="Performance Rules"> 
    <Rule TypeName="RemoveUnusedLocals" Category="Microsoft.Performance" CheckId="CA1804"> 
    <Name> 
     Remove unused locals 
    </Name> 
    <Description> 
     Remove locals that are not used or are only assigned to in method implementations. 
    </Description> 
    <Url> 
     @ms182278(VS.100).aspx 
    </Url> 
    <Resolution> 
     {0} declares a variable, {1}, of type {2}, which is never used or is only assigned to. Use this variable or remove it. 
    </Resolution> 
    <Email /> 
    <MessageLevel Certainty="95"> 
     Warning 
    </MessageLevel> 
    <FixCategories> 
     NonBreaking 
    </FixCategories> 
    <Owner /> 
    </Rule> 
</Rules> 

cevap

6

kural adı (sınıfsal tipi adının aksine) Kod Analizi çalışması tarafından oluşturulan FxCop raporunda ihlali mesajın içerdiği çünkü bu olur. Teorik olarak, Visual Studio, başka bir yerde aramaya başlamadan önce rapordaki <Rules> düğümü altındaki kural adını arayabilir (ve büyük ihtimalle). Bununla birlikte, VS 2012'de yoktur. Bunun yerine, yalnızca kural kurallarını yüklenen kural gruplarından alınan kural bilgisinden alır.

Buradaki zor şey, kullanıcı arabirimi görüntüleme amaçları için Visual Studio'nun, Kod Analizi işlemlerinde yapılandan tamamen ayrı bir arama ve yükleme kuralı yüklemesi gerçekleştirmesidir. İkincisi, fxcopcmd.exe'u MSBuild özelliklerinden oluşturulan bir komut satırı ile çalıştırarak gerçekleştirilir. Önceden, Kod Analizi için Visual Studio eklentilerine gömülü tamamen ayrı mantık kullanır ve proje düzeyinde kural konumlarını veya kural kümesi dosyalarını dikkate almaz.

(. Kanlı detayları hakkında, yani sonuçlar CodeAnalysis.dll mecliste Microsoft.VisualStudio.CodeAnalysis.ManagedRuleProvider sınıfa üzerinden yapılabilecek gibi görünüyor) Yani kural adlarını görmek istiyorsanız ... Temelde iki seçenek vardır:

  1. Kural derlemenizi, Visual Studio tarafından alınacak şekilde <VS install directory>\Team Tools\Static Analysis Tools\FxCop\Rules klasörüne koyun.

  2. Kurallarınızın ve yerleşik kurallar hem isimlerini sahip olmasını sağlayacak şekilde aşağıdaki gibi bir değerle (yerine mevcut CodeAnalysis kullanmak yerine, bir boşluk, Code Analysis adında yeni bir anahtar oluşturmak için) bir HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\11.0\Code Analysis\FxCopRulePath kayıt düğümünü ekle görüntülenen: %FxCopDir%\Rules;C:\Foo\Bar\YourRulesFolder

+0

benim durumumda, benim DLL yolunu vermek için '.ruleset' dosyanın' RuleHintPaths' etiketi kullanılır, ancak dediğiniz gibi VS adlı eklentisi bunu görmezden görünüyor. Cevap için teşekkürler, görmek istediğim kişi olmasa bile :). –

+0

Dosyaları \ Takım Araçları \ Statik Analiz Araçları \ FxCop \ Rules \ 'a kopyalayın, ancak çoğunlukla kural eklediğimizden ya da değiştirdiğimizden, bu durumun optimal olmamasından kaynaklanır. Kayıt defteri anahtarı sistemimde yoktu, bu yüzden oluşturmayı denedim, ancak işe yaramıyor. Windows 7 64 bit sistemim var, anahtar başka bir yere yerleştirilebilir mi? Teşekkürler! –

+0

Kayıt defteri anahtarını ekledikten sonra Visual Studio'yu yeniden başlattınız mı? Ayrıca, önceden varolan 'HKEY_CURRENT_USER \ Software \ Microsoft \ VisualStudio \ 11.0 \ CodeAnalysis' anahtarının altına FxCopRulePath değerini eklemeyi denediniz mi, yoksa sözcükler arasında boşluk olan yeni bir' Code Analysis' anahtarı oluşturdunuz mu? (İkincisi gereklidir.) –

İlgili konular