.NET 4 és Visual Studio 2010 kategória bejegyzései

Egyedi ablak cím Visual Studioban

Aki gyakran indítja el a Visual Studiot egyszerre több példányban azért, hogy ugyanannak a projektnek több változatát különböző könyvtárakból nyissa meg, az gyakran bosszankodik azon, hogy sem a Visual Studio ablakának címsorában, sem pedig a Windows tálcán nem látszik, hogy ép melyik ágról van szó. Minden teljesen egyforma:

vs-rename-similar

Ezen segíthet a Rename Visual Studio Window Title bővítmény, ami a szülő könyvtárak neveit olyan mélységben szúrja be a címsorba, ahogy csak szeretnénk:

vs-rename-title

Persze ugyanez jelenik meg a tálcán is:

vs-rename-taskbar-branches

A megjelenés egészen jól testreszabható a beállítások között:

vs-rename-options

Apró, de hasznos eszköz.

 

Technorati-címkék: ,

Visual Studio asp:Localize snippet készítése

Az egyik projektünkben éppen többnyelvűsítünk, ami részben abból áll, hogy az ASPX oldalakban lévő statikus szövegeket pakolgatjuk ki resx fájlokba. A szövegeket asp:Localize vezérlővel akarjuk megjeleníteni, ami valójában egy Literal, abból származik és semmivel se tud többet, csak épp messziről ordít róla, hogy mire használjuk.

Egy idő után meguntam a gépelést és összedobtam egy code snippetet hozzá, hogy TAB-TAB-bal gyorsan be lehessen szúrni a lényeget, csak az erőforrás rekord nevét kelljen megadni. Íme a kód, amit egy .snippet kiterjesztésű fájlba kell bemásolni a C:\Program Files (x86)\Microsoft Visual Studio 10.0\Web\Snippets\HTML\1033\ASP.NET mappába, a Studio magától fel fogja ismerni:

<CodeSnippet Format="1.1.0" 
             xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
  <Header>
    <Title>localize</Title>
    <Author>Balássy György</Author>
    <Shortcut>localize</Shortcut>
    <AlternativeShortcuts>
      <Shortcut Value="localize">asp:localize</Shortcut>
    </AlternativeShortcuts>
    <Description>
      Markup snippet for a control that contains localized text
    </Description>
    <SnippetTypes>
      <SnippetType>Expansion</SnippetType>
    </SnippetTypes>
    <FileExtensions>
      aspx;master;ascx
    </FileExtensions>
  </Header>
  <Snippet>
    <Declarations>
      <Literal>
        <ID>key</ID>
        <ToolTip>key</ToolTip>
        <Default>key</Default>
      </Literal>
    </Declarations>
    <Code Language="html">
      <![CDATA[<asp:localize runat="server" meta:resourcekey="$key$" />$end$]]>
    </Code>
  </Snippet>
</CodeSnippet>

Egy-egy snippet pillanatok alatt megvan és utána sok gépeléstől kímél meg, megéri.

 

Technorati-címkék: ,

HTML postback ellenőrzés ASP.NET 4.0 és 4.5 esetén

Az ASP.NET az 1.1 verziótól kezdve tartalmaz alapszintű beépített védelmet a cross-site scripting (XSS) támadások ellen. Ezzel úgy szoktunk szembesülni, hogy HTML markupot próbálunk postbackelni, ami szerencsére elhasal a request validation védelmen ezzel a hibával:

System.Web.HttpRequestValidationException: A potentially dangerous Request.Form value was detected from the client

Persze erre többnyire szükség van, de néha – főleg WYSIWYG editorok esetén – mégis szeretnénk HTML kódot küldeni a szerverre.

ASP.NET 2.0 esetén a megoldás nagyon egyszerű volt, elég volt az adott oldalon a @Page direktívában a ValidateRequest=”false” beállítás. (Azt le se írom, hogy lehet az egész alkalmazásra kikapcsolni a web.config-ban.)

Az ASP.NET 4.0-ban viszont jelentős változtatások történtek, amit két módon szoktunk észrevenni:

  • Olyan helyeken is jön HttpRequestValidationException, ahol nem az oldal számára küldünk fel HTML adatokat, hanem cookie-ban vagy Ajax kérésben.
  • Hiába állítjuk át a ValidateRequest attribútumot a @Page direktívában, látszólag nem működik.

A változás lényege, hogy az ASP.NET 4.0 alapértelmezés szerint már nem csak a page számára küldött adatokat ellenőrzi, hanem a HTTP kérés minden részét. Mivel a korábbi @Page és web.config beállítások csak az oldalra vonatkoztak, ezért azok állítgatása már nincs hatással a 4.0 szerinti működésre.

Ha mégis szeretnénk egy oldalra kikapcsolni az ellenőrzést, akkor először a web.config-ban vissza kell állítani a működést 2.0 üzemmódra:

<location path="Admin/MyEditor.aspx">
   <system.web>
     <httpRuntime requestValidationMode="2.0" />
   </system.web> </location>

Ezek után a korábbi módon működik a ValidateRequest attribútum a @Page direktívában.

ASP.NET 4.5 újdonságok

Az ASP.NET 4.5 verzióban két fontosabb újdonság van: egyrészt finomabban hangolhatjuk, hogy mit szeretnénk ellenőriztetni, másrészt az ellenőrzést a platform alaposabb módon, az AntiXSS Library segítségével végzi el. A korábbi verziók legfőbb hiányossága az volt, hogy nem tudtuk mező szinten megadni, mely mezőket kívánjuk ellenőriztetni és melyeket nem (legalábbis WebForms esetén), azt pedig főleg nem, hogy mikor.

Ez most úgy változik, hogy az ellenőrzés alapértelmezés szerint (requestValidationMode="4.5") csak akkor és csak arra az adatra fut le, amikor a kódunk eléri a kérés adott részét. Ezt hívják késleltetett (vagy más néven lusta) ellenőrzésnek.

Az ellenőrzést immár kikapcsolhatjuk egyes vezérlőkre, mert a Control osztály kapott egy ValidateRequestMode tulajdonságot, ami ValidateRequestMode.Enabled, Disabled vagy Inherit értéket vehet fel.

Sőt, nem csak kikapcsolhatjuk az ellenőrzést, hanem meg is kerülhetjük azt. A HttpRequest osztály kapott egy csak olvasható Unvalidated tulajdonságot, amin keresztül egy UnvalidatedRequestClass példány formájában elérhetjük a kéréshez tartozó összes adatot (Cookies, Form, Headers, QueryString, Url stb.) anélkül, hogy az ellenőrzés beindulna. Ennek az az előnye, hogy a kódunk explicit módon kifejezi a szándékunkat, szó sem lehet véletlenről. Ekkor az ellenőrzést természetesen nekünk kell elvégeznünk!

 

Eltűnt item template-ek

Egyik napról a másikra eltűntek a Studioból az item template-jeim. Nem a sajátok, a gyáriak. Bármit akartam hozzáadni az Add New Item ablakban a projekthez, ilyen hibaüzenet fogadott:

Could not find file C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\ItemTemplatesCache\CSharp\Web\1033\WebForm.zip\WebForm.vstemplate.

És milyen igaz, valóban nincs ott olyan fájl, sőt az ItemTemplatesCache mappám szinte üres volt. De hogy mitől, a jóég se tudja.

A klasszikus megoldás ilyenkor a repair, de arra se időm, se szabad helyem nem volt, így végül az /InstallVSTemplates kapcsoló segített admin módban:

devenv.exe /InstallVSTemplates

 

Technorati-címkék:

Ingyen e-könyvek az MS Presstől

mspress_logo_145x90Az alábbi könyvek ingyenesen letölthetőek az MS Press oldaláról többnyire PDF, esetenként XPS, EPUB és MOBI formátumban is:

Ingyen és jogtisztán. Jó, nem?

 

Technorati-címkék:

ClickOnce érdekességek

Összességében szeretem a ClickOnce technológiát, mert jelentősen megkönnyíti a felhasználók életét, ezért is használjuk a VIK-en a záróvizsga jegyzőkönyv program telepítéséhez. Persze nem minden esetben ez a legjobb telepítőcsomag formátum, hiszen a testreszabási lehetőségek korlátozottak, de nekünk éppen megfelel. A héten – fél év után ismét – egy új verziót publikáltam volna a programból, de belefutottam néhány érdekességbe.

Nem lehet publikálni

Az új verziót a következő módon szoktam elkészíteni: Project Properties –> Publish –> Verziószám beállítása –> Publish Wizard, mert így tudom legjobban kézben tartani, hogy mi történik. De most erre ezt az üzenetet kaptam:

Error: Cannot publish because a project failed to build.

Az Output ablakban semmi több, ennyiből kell főznünk. Hát, ha balról nem engedi a ló, hogy felszálljunk rá, próbáljuk jobbról: Solution Explorer –> jobb klikk a projekten –> Publish. Így megy, csodálatos! 🙂

Lejárt a tanúsítvány

Amikor már azt hittem, hogy sínen vagyunk és csak egy Visual Studio bugba sikerült belefutnunk, szembejött az alábbi érdekes hiba:

The signer’s certificate is not valid for signing.

Ejha, ennek a fele sem tréfa, nézzük csak meg azt a tanúsítványt. Irány a Project Properties ablak, azon belül is a Signing (nem a Publish!) fül. Íme az aláíró tanúsítvány:

clickonce-certificate

Igen, ez a Visual Studio által generált önaláírt tanúsítvány, amire nincs mentség, csak kifogások, nem volt más választásunk. Szemmel láthatóan ez valóban lejárt, tehát itt valamit tenni kell. Van ezen az ablakon egy Create Test Certificate gomb, amivel simán generálhatok új tanúsítványt, de annak következményei vannak. Először is jön ez az üzenet:

The application is signed with a different key than the existing application on the server. Do you want to overwrite it?

Amire mondhatjuk, hogy naná, de az MSDN szerint akkor bizony a régi felhasználóink nem fogják megkapni a frissítést. Ez a mi esetünkben semmiképpen sem elfogadható, más megoldás kell. Elvileg .NET 4 esetén ez már nem probléma, mégsem akartam kockáztatni.

Valahogy tehát meg kellene hosszabbítani a létező tanúsítványt, amihez a KB925521 cikkben találunk is útmutatást, egy rakás .cpp kód formájában. Cliff Stanford oldaláról letölthető egy lefordított RenewCert verzió, ami nálam a C runtime library-kre hivatkozva elszállt, de szerencsére Robin Shahan blogjában találtam egy olyan változatot, ami mellett ott állnak a szükséges dll-ek is. Ezzel egy csapásra sikerült meghosszabbítani a korábban használt tanúsítványt és gond nélkül működik a frissítés. 5 évig.

 

Real World .NET, C#, and Silverlight: Indispensible Experiences from 15 MVPs

image 1

Örömmel jelentem, hogy kézzelfogható bizonyítékát kaptam annak, hogy megjelent a Wroxnál a Real World .NET, C#, and Silverlight: Indispensible Experiences from 15 MVPs c. könyv. Számomra azért különleges ez a könyv, mert ez a második angol nyelven, külföldön megjelent könyv, aminek a szerzője, pontosabban társszerzője voltam.

Ez a könyv azért egyedi, mert nem egy témával foglalkozik, hanem többel, konkrétan tizenöttel:

“Written by a group of experienced MVPs, this unparalleled book delves into the intricate—and often daunting—world of .NET 4. Each author draws from a particular area of expertise to provide invaluable information on using the various .NET 4, C# 4, Silverlight 4, and Visual Studio tools in the real world.”

Nagyon jó csapat állt össze, mert minden fejezetet egy Most Valuable Professional címmel rendelkező szerző írt, mégpedig a kedvenc témaköréből:

  • David Giard: ASP.NET and jQuery
  • Bill Evjen: ASP.NET Performance
  • György Balássy: Ethical Hacking of ASP.NET
  • Gill Cleeren: How to Build a Real-World Silverlight 5 Application
  • Jeremy Likness: Silverlight — The Silver Lining for Line-of-Business Applications
  • Daron Yöndem: Tips and Tricks for Designers and Developers
  • Kevin Grossnicklaus: MVVM Patterns in Silverlight 4
  • Alex Golesh: Windows Phone "Mango" for Silverlight Developers
  • Christian Weyer: Pragmatic Services Communication with WCF
  • Dominick Baier: Securing WCF Services Using the Windows Identity Foundation (WIF)
  • Jeffrey Juday: Applied .NET Task Parallel Library
  • Vishwas Lele: The WF Programming Language
  • Christian Nagel: Practical WPF Data Binding
  • Scott Millett: Driving Development with User Stories and BDD
  • Caleb Jenkins: Automated Unit Testing

Az eredeti csapatban Velvárt András barátom is benne volt, de a 15 szerző koordinálása miatt sajnos lassan készült a könyv, így végül Bandi a SilverlightShow-n publikálta a fejezetét Windows Phone 7 for Silverlight Developers címmel e-book formájában.

A könyv az Amazonon november vége óta kapható, de a szerzői tiszteletpéldányok csak most érkeztek meg Magyarországra (az amerikai szerzők már decemberben megkapták), így én is csak most tudtam végignézni a többiek témáját, amik között nem egy nagyon hasznosat és érdekeset találtam. A vegyesfelvágottnak köszönhetően szerintem mindenki talál a könyvben a szívéhez közel álló fejezetet.

Jómagam Ethical Hacking ASP.NET címmel az ASP.NET platformban rejlő olyan biztonsági gyenge pontokról írtam, amelyek minden ASP.NET-es alkalmazást sebezhetővé tesznek bizonyos támadások ellen. Aki eljön a szerdai bemutatóra, kaphat belőle egy kis ízelítőt. Akihez pedig eljut a könyv, kérem küldjön visszajelzést, hogy hasznosnak találta-e a leírtakat.

 

Technorati-címkék: ,,,,