Tag Archives: Visual Studio

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…

Když wsdl.exe/VS hlásí „WSDL: error WSDL1: Item has already been added. Key in dictionary: ‚[45]:http://my.url.com/path:Negotiate‘

Pokud používáte wsdl.exe (nebo Add Web Reference ve VS) pro vygenerování proxy tříd(y) k webovým službám a dostáváte hlášku:

WSDL: error WSDL1: Item has already been added. Key in dictionary: '[45]:http://my.url.com/path:Negotiate' Key being added'[45]:http://my.url.com/path:Negotiate'

Tak je to nejspíš tím, že se v definičním XML souboru (parameters pro wsdl.exe) odkazujete na více WSDL dokumentů s authentizací

Mně pomohlo authentizační parametry z XML vyhodit, protože WSDL byla přístupná i anonymně. Pokud v takové situaci nejste, pak pomůže stáhnout WSDL soubory na disk (např. pomocí disco.exe) a odkázat se na ně přes file://