Tag Archives: Visual Studio

Shrnutí mého #NoResharper challenge s Visual Studio 2017

Jak přišlo na začátku roku Visual Studio 2017, rozhodl jsem se jako obvykle zkusit svůj #NoResharper challenge. S každou novou major-verzí VS zkouším, jestli by se dala používat bez Resharperu. Obecně mám rád mnoho z funkcí Resharperu, ale cena, kterou za to mám zaplatit ztrátou výkonu a stability je velkým protivníkem. Štve mě taky, že R# není v podstatě rozšířením, ale znásilní VS tak, že překryje dost podstatnou část jeho funkcí zcela vlastní implementací. Snažím se proto opakovaně najít light-weight setup bez Resharperu, kde bych si vystačil jen s čistým VS a pár lehkými doplňky do něj.

Resharper jsem v minulosti používal intenzivně. V dobách Visual Studio .NET a Visual Studio .NET 2003 to byla nezbytnost. VS2005 přišlo s prvními refaktoringy, tehdy mi to stačilo a fungoval jsem bez R# až zhruba do VS2013, kdy jsem se nechal přesvědčit dát R# další šanci. Resharper mi tehdy výborně posloužil pro nové výzvy spojené s moderními vývojářskými technikami (IoC/DI, unit-testing, …), protože pro mnoho jeho funkcí nebyla rozumná „lehká“ alternativa (dosud nepřekonané T-navigace, Go to definition, Introduce and initialize a field from constructor parameter, Adjust namespaces, atp.).

S příchodem Visual Studia 2017 se poměr sil opět změnil. VS2017 se svojí vylepšenou T-navigací (Go to…), s pomocí Roslyn-based refactorings (e.g. Roslynator) a updaty přinášejícími stále nové vylepšení produktivity mě nejenom zlákalo pro další #NoResharper challenge, ale po zhruba deseti měsících mohu konstatovat, že mi Resharper vůbec nechybí.

Moje aktuální Visual Studio je:

Když tak koukám na ten seznam, vypadá to, že bych vlastně mohl fungovat s úplně čistým VS2017 bez větších kompromisů. Největší překvapení pro mě bylo zjištění, že mám Roslynator vypnutý a ani jsem si toho nevšiml. (Vypnul jsem ho s příchodem VS2017 15.3 update, kdy jsem chtěl vyzkoušet novinky v něm.)

(Roslynator Refactorings jsem si zase zapnul, protože mi nepřinášel žádné komplikace, jen drobné příjemné pomůcky pro kódování. Nicméně se ukázalo, že kdyby se mělo sebemenší zaváhání objevit, klidně se obejdu bez něj.)

UPDATE: Pokud postrádáte CamelHumps, zkuste Subword Navigation extension.

 

 

 

 

Visual Studio: Klávesové zkratky pro navigaci na další/předchozí metodu v kódu

V Resharperu jsou známé klávesové zkratky pro navigaci na dalšího (Alt+Down) resp. předchozího (Alt+Up) membera v kódu. Málo se ale ví, že i čisté Visual Studio toto nyní umí.

Ve Visual Studiu (minimálně ve verzi 2017, ale nejspíš to umí i starší verze) můžete tyto klávesové zkratky získat namapováním příkazů Edit.NextMethodEdit.PreviousMethod (přestože mluvíme o metodách, ve skutečnosti se skáče po memberech). Tyto commandy bývaly funkční pouze pro Visual Basic, jak se teď ale vývoj pro všechny jazyky sjednocuje, fungují i v C#:

2017-09-26_10-12-19

…já asi zvolím klávesové zkratky Ctrl+UpCtrl+Down, protože mi to nějak lépe jde pod ruce a to výchozí skrolování, co tam je, je stejně k ničemu. Mimochodem Alt+Up/Down používám pro posun řádku/selection o řádek výš/níž.

MSB3270 Processor Architecture Mismatch Warning – jak ho skrýt z výpisu chyb

Pokud máte stejně jako já rádi čisté okno Error List ve Visual Studiu, pak vás může otravovat warrning typu

There was a mismatch between the processor architecture of the project being built „MSIL“ and the processor architecture of the reference „XYZ, Version=XXX, Culture=neutral, processorArchitecture=x86“, „XXX“. This mismatch may cause runtime failures. Please consider changing the targeted processor architecture of your project through the Configuration Manager so as to align the processor architectures between your project and references, or take a dependency on references with a processor architecture that matches the targeted processor architecture of your project.

Nechci teď rozebírat, jak vyřešit příčinu hlášky, ale mám návod, jak se vypořádat se situací, kdy se příčiny zbavit nechcete/nemůžete, ale potřebujete hlášku potlačit (suppress).

Do .csproj souboru příslušného projektu stačí do úvodní sekce PropertyGroup přidat:

<PropertyGroup>
  <ResolveAssemblyWarnOrErrorOnTargetArchitectureMismatch>None</ResolveAssemblyWarnOrErrorOnTargetArchitectureMismatch>
</PropertyGroup>

Jenom pozor, že tím můžete zakrýt i další varování, která se objeví později a mohou vás zajímat.

Visual Studio: Když nefunguje klávesová zkratka Ctrl+Shift+F12 – Next Error

Ve VisualStudiu mi přestala fungovat klávesová zkratka Ctrl+Shift+F12, přestože při ověření v Options je korektně namapovaná.

Obvyklou příčinou bývá požírání klávesové zkratky jinou aplikací. Vylučovací metodou se ukázalo, že pachatelem je Microsoft Teams, které když běží, klávesová zkratka ve VS nefunguje (přestože samotná aplikace Teams mezi svými Keyboard shortcuts zkratku nemá uvedenou).

Zavření aplikace Teams pomůže, Ctrl+Shift+F12 začne fungovat.

…pokud byste chtěli hlasovat pro feedback na UserVoice:
https://microsoftteams.uservoice.com/forums/555103-public-preview/suggestions/17156756-application-hides-the-ctrl-shift-f12-keyboard-sh

Visual Studio: Úprava snippetu „ctor“, aby kurzor po rozbalení skončil v místě pro zadávání parametrů

Pokud používáte snippet „ctor“ pro vytváření konstruktorů tříd, může vás štvát, že kurzor po jeho rozbalení skončí připraven v těle konstruktoru a nikoliv v místě pro zadávání parametrů.

ctor1

Drtivá většina constructorů v dnešní době stejně pouze přebírá hodnoty parametrů, které uloží do lokálních privátních fieldů. Často readonly, většinou jako dependencies v patternu Constructor Injection z rodiny Dependency Injection. Takové konstruktory se poměrně efektivně vytvářejí s použitím akce „Introduce and initialize field“ na zapsaném parametru (ať už za použití Resharperu, nebo Introduce and initialize field extension).

expand

Chceme-li změnit pozici kurzoru, stačí upravit snippet ctor a umístit marker $end$ na místo, kde chceme kurzor připravit.

Pokud máme Resharper, dostaneme se na editaci snippetu přes menu Resharper ~ Tools ~ Templates Explorer. Vybereme scope C# a editujeme „ctor“:

public $classname$ ($END$)
  {
	    
  }

Bez Resharperu je potřeba editovat přímo soubor snippetu na disku, najdete ho v cestě C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC#\Snippets\1033\Visual C#\ctor.snippet. Je to krátké XML v kterém příslušný blok rychle najdete.

Výsledné chování je pak mnohem přímočařejší:

full

The underlying connection was closed: Could not establish trust relationship for the SSL/TLS secure channel

Mě touto hláškou obšťastnil sign-in dialog ve Visual Studiu v lab Virtual Machine, ale můžete ji potkat i jinde. V mém případě byl důvod v nepřiměřeně se rozcházejícím čase virtuálního stroje a času skutečného (na serverech MSFT).

Stejně tak například bez rozumného času nejde Windows Update.

Visual Studio: Jak vypnout v Solution Exploreru rozbalování souborů (na třídy)

Pokud, stejně jako já, považujete možnost Solution Exploreru rozbalit strom souborů až na úroveň obsahu těchto souborů (na třídy, jejich membery, atp.), tuto funkci lze vypnout:

image

Buď si můžete nainstalovat VSCommands a použít volbu “Disable Graph Provider” nebo stačí toto nastavení v registrech (v Options Visual Studia to nenajdete):

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\12.0]
"UseSolutionNavigatorGraphProvider"=dword:00000000

…verzi Visual Studia samozřejmě upravit dle potřeby, prý to funguje už od VS2012 (11.0).

Update VS2015:

Funguje i pro VS2015, jen na konci cesty v registrech je verze 14.0.

Update VS2017:

VS 2017 navíc používá privátní registry pro každou instalovanou instanci. Je potřeba tedy najít příslušný soubor privateregistry.bin na disku a připojit do regedit do HKEY_USERS pomocí File / Load Hive… (na zvoleném jméně nezáleží). V připojené registry pak klíč přidáme a zase musíme dát Unload Hive…