2009-02-17 4 views
4

Должен ли я использовать поддержку рефакторинга VS 2008 или купить ReSharper?Должен ли я использовать поддержку рефакторинга VS 2008 или купить ReSharper?

Каковы некоторые из действительно хороших вещей, которые вы можете сделать с помощью ReSharper, которые не могут быть выполнены с помощью поддержки рефакторинга VS 2008?

+0

Вы думаете о коммерческой или индивидуальной лицензии? Это для личного или корпоративного использования? –

+0

коммерческая лицензия – StackUnderflow

ответ

4

Почему не download a 30 day free trial и узнать, нравится ли вам? Я уверен, что когда вы привыкнете к установке R #, вам не захочется возвращаться.

Достаточно только зеленого/оранжевого/красного знака ошибки в правой части документа, но рефакторинг выполняется намного быстрее, и есть некоторые другие действительно полезные функции, такие как очистка кода (CTRL + E + F), которая переформатирует документ в соответствии с вашими предпочтениями в стиле.

0

Определенно хотя бы попробуйте ReSharper. Это делает больше, чем рефакторинги VS2008 по умолчанию, а также хорошо отслеживает ваши тесты устройств.

Поскольку есть бесплатная пробная версия, не стоит болеть, чтобы попробовать.

Я использую его на некоторое время теперь, и я должен признать, что я никогда не мог вернуться только простой ванили Visual Studio ...

0

КСТАТИ: есть также Refactor! Pro. Я использовал пробную версию на короткое время и понравился (еще не купил).

Как и в случае с ReSharper, он предлагает намного больше рефакторинга и быстрее, чем инструменты рефакторинга Visual Studio.

1

Использование Resharper. Я использовал его в течение многих лет. Как только вы узнаете ярлыки, это похоже на то, что вы наняли другого парня, чтобы сделать для вас работу :)

Обратите внимание, что он может быть настроен на использование тех же ключей, что и IntelliJ Idea, поэтому, если вам нужно сделать некоторую Java, вы уже знаете как использовать (очень приятную) Java-среду IDE.

Кроме того, прочитать - 31 days of resharper

2

Одна из вещей, которые я люблю о Resharper, что вы можете создать собственный тип пользователей Layout и использовать его для форматирования всех ваших файлов.

Это означает, что вы можете сортировать все поля/свойства/методы/конструкторы/переопределения/реализации интерфейса/делегаты/перечисления и т. Д. И т. Д. В любом mannar, который вам нравится (включая подсерии по имени, модификатору доступа и т. Д.), А затем даже заключите их в регионах, если вы выберете.

Например вот принципы я в настоящее время код на:

CONSIDER grouping members into the following sections in the specified order: 
• All fields 
• All constructors 
• Public and protected properties 
• Public and protected methods 
• Events 
• All explicit interface implementations 
• Internal members 
• Private members 
• All nested types 
When more than one access modifier is in a section, the most visible access modifier should come first (e.g. public before protected). 
DO use #region blocks around not publicly callable and explicit interface implementation groups. 
#region internal members 
... 
#endregion 
#region private members 
... 
#endregion 

А вот шаблон я использую, чтобы соответствовать им:

<?xml version="1.0" encoding="utf-8" ?> 

<!-- 
I. Overall 

I.1 Each pattern can have <Match>....</Match> element. For the given type declaration, the pattern with the match, evaluated to 'true' with the largest weight, will be used 
I.2 Each pattern consists of the sequence of <Entry>...</Entry> elements. Type member declarations are distributed between entries 
I.3 If pattern has RemoveAllRegions="true" attribute, then all regions will be cleared prior to reordering. Otherwise, only auto-generated regions will be cleared 
I.4 The contents of each entry is sorted by given keys (First key is primary, next key is secondary, etc). Then the declarations are grouped and en-regioned by given property 

II. Available match operands 

Each operand may have Weight="..." attribute. This weight will be added to the match weight if the operand is evaluated to 'true'. 
The default weight is 1 

II.1 Boolean functions: 
II.1.1 <And>....</And> 
II.1.2 <Or>....</Or> 
II.1.3 <Not>....</Not> 

II.2 Operands 
II.2.1 <Kind Is="..."/>. Kinds are: class, struct, interface, enum, delegate, type, constructor, destructor, property, indexer, method, operator, field, constant, event, member 
II.2.2 <Name Is="..." [IgnoreCase="true/false"] />. The 'Is' attribute contains regular expression 
II.2.3 <HasAttribute CLRName="..." [Inherit="true/false"] />. The 'CLRName' attribute contains regular expression 
II.2.4 <Access Is="..."/>. The 'Is' values are: public, protected, internal, protected internal, private 
II.2.5 <Static/> 
II.2.6 <Abstract/> 
II.2.7 <Virtual/> 
II.2.8 <Override/> 
II.2.9 <Sealed/> 
II.2.10 <Readonly/> 
II.2.11 <ImplementsInterface CLRName="..."/>. The 'CLRName' attribute contains regular expression 
II.2.12 <HandlesEvent /> 
--> 

<Patterns xmlns="urn:shemas-jetbrains-com:member-reordering-patterns"> 

    <!--Do not reorder COM interfaces--> 
    <Pattern> 
    <Match> 
     <And Weight="100"> 
     <Kind Is="interface"/> 
     <HasAttribute CLRName="System.Runtime.InteropServices.InterfaceTypeAttribute"/> 
     </And> 
    </Match> 
    </Pattern> 

    <!--Special formatting of NUnit test fixture--> 
    <Pattern RemoveAllRegions="true"> 
    <Match> 
     <And Weight="100"> 
     <Kind Is="class"/> 
     <HasAttribute CLRName="NUnit.Framework.TestFixtureAttribute" Inherit="true"/> 
     </And> 
    </Match> 

    <!--Setup/Teardow--> 
    <Entry> 
     <Match> 
     <And> 
      <Kind Is="method"/> 
      <Or> 
      <HasAttribute CLRName="NUnit.Framework.SetUpAttribute" Inherit="true"/> 
      <HasAttribute CLRName="NUnit.Framework.TearDownAttribute" Inherit="true"/> 
      <HasAttribute CLRName="NUnit.Framework.FixtureSetUpAttribute" Inherit="true"/> 
      <HasAttribute CLRName="NUnit.Framework.FixtureTearDownAttribute" Inherit="true"/> 
      </Or> 
     </And> 
     </Match> 
     <Group Region="Setup/Teardown"/> 

    </Entry> 

    <!--All other members--> 
    <Entry/> 

    <!--Test methods--> 
    <Entry> 
     <Match> 
     <And Weight="100"> 
      <Kind Is="method"/> 
      <HasAttribute CLRName="NUnit.Framework.TestAttribute" Inherit="false"/> 
     </And> 
     </Match> 
     <Sort> 
     <Name/> 
     </Sort> 
    </Entry> 
    </Pattern> 

    <!--Default pattern--> 
    <Pattern RemoveAllRegions="true"> 
    <!--public delegate--> 
    <Entry> 
     <Match> 
     <And Weight="100"> 
      <Access Is="public"/> 
      <Kind Is="delegate"/> 
     </And> 
     </Match> 
     <Sort> 
     <Name/> 
     </Sort> 
     <Group/> 
    </Entry> 

    <!--public enum--> 
    <Entry> 
     <Match> 
     <And Weight="100"> 
      <Access Is="public"/> 
      <Kind Is="enum"/> 
     </And> 
     </Match> 
     <Sort> 
     <Name/> 
     </Sort> 
     <Group/> 
    </Entry> 

    <!--fields and constants--> 
    <Entry> 
     <Match> 
     <Or> 
      <Kind Is="constant"/> 
      <Kind Is="field"/> 
     </Or> 
     </Match> 
     <Sort> 
     <Kind Order="constant field"/> 
     <Static/> 
     <Readonly/> 
     <Access Order="public"/> 
     <Name/> 
     </Sort> 
     <Group/> 
    </Entry> 

    <!--Constructors. Place static one first--> 
    <Entry> 
     <Match> 
     <Kind Is="constructor"/> 
     </Match> 
     <Sort> 
     <Static/> 
     </Sort> 
     <Group/> 
    </Entry> 

    <!--public and protected properties, indexers--> 
    <Entry> 
     <Match> 
     <And> 
      <Or> 
       <Kind Is="property"/> 
       <Kind Is="indexer"/> 
      </Or> 
      <Or> 
      <Access Is="public"/> 
      <Access Is="protected"/> 
      </Or> 
     </And> 
     </Match> 
     <Sort> 
     <Access Order="public"/> 
     <Name/> 
     </Sort> 
     <Group/> 
    </Entry> 

    <!-- Methods --> 
    <Entry> 
     <Match> 
     <And> 
      <Kind Is="method"/> 
      <Or> 
       <Access Is="public"/> 
       <Access Is="protected"/> 
      </Or> 
     </And> 
     </Match> 
     <Sort> 
     <Access Order="public"/> 
     <Name/> 
     </Sort> 
     <Group/> 
    </Entry> 

    <!-- Events--> 
    <Entry> 
     <Match> 
     <Kind Is="event"/> 
     </Match> 
     <Sort> 
     <Name/> 
     </Sort> 
     <Group/> 
    </Entry> 

    <!--interface implementations--> 
    <Entry> 
     <Match> 
     <And Weight="100"> 
      <Kind Is="member"/> 
      <ImplementsInterface/> 
     </And> 
     </Match> 
     <Sort> 
     <ImplementsInterface Immediate="true"/> 
     <Kind Order="property"/> 
     <Name/> 
     </Sort> 
     <Group/> 
    </Entry> 

    <!--internal properties, indexers, methods--> 
    <Entry> 
     <Match> 
     <And> 
      <Or> 
       <Kind Is="property"/> 
       <Kind Is="indexer"/> 
       <Kind Is="method"/> 
      </Or> 
      <Access Is="internal"/> 
     </And> 
     </Match> 
     <Sort> 
     <Access Order="public"/> 
     <Kind Order="property"/> 
     <Name/> 
     </Sort> 
     <Group Region="Internal Members"/> 
    </Entry> 

    <!--private properties, indexers, methods--> 
    <Entry> 
     <Match> 
     <And> 
      <Or> 
       <Kind Is="property"/> 
       <Kind Is="indexer"/> 
       <Kind Is="method"/> 
      </Or> 
      <Access Is="private"/> 
     </And> 
     </Match> 
     <Sort> 
     <Access Order="public"/> 
     <Kind Order="property"/> 
     <Name/> 
     </Sort> 
     <Group Region="Private Members"/> 
    </Entry> 

    <!--all other members--> 
    <Entry/> 

    <!--nested types--> 
    <Entry> 
     <Match> 
     <Kind Is="type"/> 
     </Match> 
     <Sort> 
     <Name/> 
     </Sort> 
     <Group/> 
    </Entry> 
    </Pattern> 
</Patterns> 

Это делает форматирование кода для удовлетворения ваших компаний кодирования стиль такой же простой, как и одна комбинация клавиш.

0

Одна вещь, которая мне нравится в Resharper, заключается в том, что вы можете использовать Ctrl-Shift-Alt-Up или Down для перемещения метода/поля/свойства и т. Д. Вверх или вниз в файле (прямо над или под методом/полем/свойством рядом с ним), или вы можете использовать браузер структуры файлов для просмотра и изменения структуры вашего файла с помощью перетаскивания.

0

Я пробовал 30-дневную пробную версию, и теперь я подключен к R #