2009-11-24 49 views
12

我絕對崇拜ReSharper的,沒有它是行不通的,但也有我遇到了和教訓,避免一些陷阱:ReSharper的陷阱

  • 允許ReSharper的自動重命名字符串文字真的可以咬你例如,當您的對象變量與您的DAL SQL或其他字符串常量中的列名匹配時。我已經瞭解到,當第二個重命名對話框出現時,我不需要不耐煩地敲擊回車鍵,我真的需要看看ReSharper的建議,並經常跳過字符串文字重命名步驟。
  • 這是一個更陰險的問題:當您打開解決方案範圍分析時,ReSharper會告訴您是否使用公共方法。這包括屬性中的getter和setter。這是一個很棒的功能,但ReSharper不知道的是,當你設計一個視圖時,它將在設計器(窗體,用戶ctrl)中顯示屬性獲取器和設置器在設計時被調用並且不顯示在彙編。因此,ReSharper會建議那些屬性的getter或setter可以被設置爲private或者被刪除。但是,如果您進行調整,然後在設計器中加載視圖,則設計器將會崩潰,因爲該屬性不可用,並且錯誤消息不完全明顯。簡而言之,程序員在設計視圖時需要仔細考慮財產使用建議。

這些是我的biggies。還有什麼可以咬我和ReSharper愛好者的?

+1

提供重命名字符串中的用法只是一個愚蠢的功能。它一直在屁股上咬我,我永遠不想搜索字符串。重構的整個*點*是防彈的。在字符串內重命名絕不是防彈 - 我不知道他們爲什麼提供它。 –

+1

@Kirk:我同意。至少它應該被默認禁用。 –

回答

22

當我運行使用#ifs進行條件編譯的預處理器指令,並且設置了當前配置以便隱藏一段代碼時,它似乎看不到#if的代碼,並且會推薦抽出一段代碼使用的變量,認爲它從來沒有被調用過。

+4

+1。 Resharper似乎並不瞭解條件編譯器語句。 – camainc

+5

我今天碰到這個,並報告:http://youtrack.jetbrains.com/issue/RSRP-337056 –

+1

@RudiVisser你已經報道了很久以前,問題仍然存在!這也是一個使用問題,Resharper認爲有些命名空間可以被刪除,但事實並非如此... –

14

您可以通過UsedImplicitly屬性標記這些屬性,並且ReSharper不會建議將其刪除。

+1

好的,雖然我喜歡避免使用屬性來指導生產力工具,因爲它將代碼綁定到第三方包。有沒有可能讓R#可以忽略Control派生類中的屬性?或者也許這應該是JetBrains團隊在下一個版本中的一項功能建議。 –

+0

哈哈。 23隊!我想也許我只是把功能請求! –

+6

沒有必要引用JetBrains程序集。 您可以將這些屬性複製到您的項目,任何地方和命名空間。 查看ReSharper→選項→代碼註釋→將默認實現複製到剪貼板。 – derigel

2

Resharper要麼完全忽略,要麼有完全不同的處理Warning As Errors項目構建開關的實現。 此外,上次我檢查時,與警告一起使用時,忽略項目配置中的「取消警告」塊。

7

過去我們已經使用了文件範圍的條件編譯,而且Resharper對這些完全是堅持不懈的。它不知道條件是否存在,如果兩個文件都聲明相同的常量和方法,則會出現大量衝突和錯誤。

<ItemGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' Or '$(Configuration)|$(Platform)' == 'Release|x64'"> 
    <Compile Include="SomeFileFor.x64.cs"> 
     <SubType>Code</SubType> 
    </Compile> 
</ItemGroup> 
<ItemGroup Condition=" !('$(Configuration)|$(Platform)' == 'Debug|x64' Or '$(Configuration)|$(Platform)' == 'Release|x64')"> 
    <Compile Include="SomeFileFor.x32.cs"> 
     <SubType>Code</SubType> 
    </Compile> 
</ItemGroup> 
2

將條件編譯添加到ReSharper 8。只需獲取最新版本。