.NET 3.5 és Visual Studio kategória bejegyzései

.NET Framework 3.5 telepítése Windows 8-ra és Windows Server 2012-re

SQL Server 2012-t telepítettem Windows Server 2012-re, és látszólag minden a szokásos módon zajlott. Az előkövetelmények ellenőrzése simán megtörtént, ám a telepítés közepén jött egy figyelmeztetés, hogy szükség van .NET Framework 3.5-re. Mivel a dialógus ablakon mindössze egy OK gomb volt, csak bízhattam benne, hogy az operációs rendszerrel települő .NET 4.5 is megfelelő lesz. Hát nem lett, az SQL telepítés nem sikerült. Aztán kiderült, hogy a .NET Framework 3.5 telepítése nem is olyan egyszerű…

Windows 8-ban és Windows Server 2012-ben a .NET Framework 3.5 ún. Feature on Demand. Ez azt jelenti, hogy az operációs rendszerrel csak a telepítéshez szükséges metaadatok települnek, a szükséges binárisok nem. Azokat máshonnan kell beszereznünk.

 

Windows 8

Windows 8 esetén nyissuk meg a Programs and Features ablakot, amit szerintem legegyszerűbben a Windows+X-es rendszergazdai menüből tehetünk meg:

net35-windows8-1

Pipáljuk be a .NET Framework 3.5 (includes .NET 2.0 and 3.0) sort, majd kattintsunk az OK-ra. Jön egy kis keresgélés:

net35-windows8-2

Majd a kérdés, hogy indulhat-e a letöltés a Windows Update-ről:

net35-windows8-3

Biztos én vagyok túl igényes, de nekem innen nagyon hiányzik, hogy mégis mennyit akarna letölteni és hogy meg lehessen adni másik útvonalat. Ha valóban akarunk .NET 3.5-öt, akkor kattintsunk a Download files from Windows Update gombra. Jön egy kis töltögetés:

net35-windows8-4

Majd ha pechünk van, akkor ez a képernyő:

net35-windows8-5

A Tell me how to solve this problem link kivételesen egészen hasznos, ugyanis a KB2734782 cikkre (Error codes when you try to install the .NET Framework 3.5 in Windows 8 or in Windows Server 2012) visz, ami valóban tud segíteni. Nálam az volt a gond, hogy a gép tartományban van, csoportházirend tolja le rá a WSUS beállításokat.

Mivel nem volt lehetőségem ezen módosítani, maradt a másik megoldás, parancssorból telepíteni a Frameworköt. Szerencsére a .NET 3.5 megtalálható a Windows 8 telepítő médián, parancssorból így kell telepíteni:

dism /online /enable-feature /featurename:NetFx3 /All /Source:D:\sources\sxs /LimitAccess

Pillanatok alatt megtörténik, biztosan gyorsabb, mint Windows Update-ről:

net35-windows8-6

 

Windows Server 2012

A dism-es, parancssoros telepítés tökéletesen működik Windows Server 2012 esetén is, a szükséges fájlok ott is megtalálhatók a telepítő lemezen. Szerencsére itt GUI-n is meg tudjuk oldani a telepítést. Ehhez indítsuk el az Add Roles and Features Wizard-ot és jelöljük be a .NET Framework 3.5 Features opciót (katt a teljes képért):

net35-ws2012-1

A Next után a következő oldalon találunk egy végigolvashatatlan sárga hibaüzenetet:

net35-ws2012-2

A hibaüzenet azt akarja mondani, hogy ha kicsivel több esélyt akarunk magunknak a sikeres telepítésre, akkor alul kattintsunk a Specify an alternate source path linkre:

net35-ws2012-3

A sok szöveg lényege, hogy adjuk meg a telepítő fájlok helyét, például D:\Sources\SxS:

net35-ws2012-4

Innen már simán végigmegy a varázsló és az SQL Server is gond nélkül települ.

 

Reklámok

Foglaltság lekérdezése az Exchange-ből

Az Exchange Web Services (EWS) segítségével tetszőleges klienssel kapcsolódhatunk az Exchange Serverhez és lekérdezhetjük a felhasználóink naptárát.

Mivel szabványos SOAP-os webszolgáltatásról van szó, az első lépés természetesen a WSDL fájl elérése, ami itt található:

http://SERVER/EWS/services.wsdl

Erre adjunk referenciát Visual Studioban (a SERVER helyére beírva az Exchange Serverünk FQDN-jét) és közben figyeljünk a http/https alkalmazására. Ha ez megvan, egy ExchangeServerBinding objektumon keresztül kapcsolódhatunk a szolgáltatáshoz:

  ExchangeServiceBinding binding = new ExchangeServiceBinding();
  binding.Credentials = CredentialCache.DefaultCredentials;
  binding.Url = @"http://SERVER/EWS/exchange.asmx";

Fontos, hogy mindenképpen hitelesíteni kell magunkat, alapértelmezés szerint anonymous felhasználó nem fér hozzá a webszolgáltatáshoz. A foglaltság lekérdezéséhez számos paramétert át kell adnunk a kérésben, például azt, hogy a cél felhasználó naptárának mely időszakára vagyunk kíváncsiak. Szerintem a legegyszerűbb egy hétfőtől péntekig tartó időszakot megadni:

  Duration duration = new Duration();
  duration.StartTime = this._firstDay;    // E hét hétfője
  duration.EndTime = this._firstDay.AddDays( 5 );

Ezen a webszolgáltatáson keresztül többféle formátumban is lekérdezhetjük a felhasználó naptárát. Nekünk most arra van szükségünk, hogy az előbb megadott időszakban, fél órás bontásokban (interval), mikor szabad vagy mikor foglalt az illető:

  FreeBusyViewOptionsType options = new FreeBusyViewOptionsType();
  options.TimeWindow = duration;
  options.RequestedView = FreeBusyViewType.FreeBusyMerged;
  options.RequestedViewSpecified = true;
  options.MergedFreeBusyIntervalInMinutes = 30;
  options.MergedFreeBusyIntervalInMinutesSpecified = true;

Meg kell adnunk azt is, hogy kinek a naptára érdekel minket (Free/Busy time Read jogosultsággal kell bírnunk a naptárához), itt több felhasználót is felsorolhatunk MailboxData objektumok formájában:

  MailboxData mailbox = new MailboxData();
  mailbox.AttendeeType = MeetingAttendeeType.Required;
  mailbox.Email = new EmailAddress();
  mailbox.Email.Address = "felhasználó@example.com";

A legfájdalmasabb rész a kérő időzónájához tartozó összes paraméter megadása. A Central European Standard Time zónához tartozó értékeket kibogarásztam a registry-ből, de persze akár változhat is:

  SerializableTimeZone timeZone = new SerializableTimeZone();
  timeZone.Bias = -60;
  timeZone.StandardTime = new SerializableTimeZoneTime();
  timeZone.StandardTime.Bias = 0;
  timeZone.StandardTime.DayOfWeek = "Sunday";
  timeZone.StandardTime.DayOrder = 5;
  timeZone.StandardTime.Month = 10;
  timeZone.StandardTime.Time = "03:00:00";
  timeZone.DaylightTime = new SerializableTimeZoneTime();
  timeZone.DaylightTime.Bias = -60;
  timeZone.DaylightTime.DayOfWeek = "Sunday";
  timeZone.DaylightTime.DayOrder = 5;
  timeZone.DaylightTime.Month = 3;
  timeZone.DaylightTime.Time = "00:00:00";

Ha ez mind megvan, összerakhatjuk őket egyetlen objektumba:

  GetUserAvailabilityRequestType request = new GetUserAvailabilityRequestType();
  request.TimeZone = timeZone;
  request.FreeBusyViewOptions = options;
  request.MailboxDataArray = new MailboxData[] { mailbox };

Végül meghívhatjuk a webszolgáltatás GetUserAvailabilty függvényét:

  GetUserAvailabilityResponseType response = binding.GetUserAvailability( request );

A válaszban többféle formában is megtaláljuk, hogy mikor foglalt és mikor szabad az illető. Egy szabad/foglalt naptár rajzolásához talán a legegyszerűbb, ha a response.FreeBusyResponseArray[ 0 ].FreeBusyView.MergedFreeBusy stringet vizsgáljuk: ez pontosan annyi karakterből áll, ahány intervallumot kértünk a szervertől és minden esetben 0 jelzi, ha még szabad az az intervallum. Az egyes értékek előbb egy napon belül mennek végig az intervallumokon, majd utána jön a következő nap.

Build error TSD00259: dbschema does not exist

Az egyik projektünkben a Data Dude-ot használjuk az adatbázis szkriptek kezelésére és azt kell mondanom, hogy egészen bevált. Azonban x64-es gépen nem sikerült lefordítanunk az x86-on tökéletesen működő projektet.

Akinek van VS 2008 Team System változata, annak feltétlenül érdemes kipróbálni a Data Dude-ot, teljes nevén a Visual Studio Team System 2008 Database Editiont, mert nagyon praktikus funkciók vannak benne az adatbázis forrásának kezeléséhez. Aki pedig szeret build környezetet automatizálni, annak érdemes megnéznie, mit tud a Data Dude Power Tools. Ráadásul ezek a funkciók a VS 2010-től kezdve már részben a Professional változattól is elérhetőek lesznek, érdemes minél előbb hozzászokni.

Az egyik kedves szolgáltatása ennek a projekt típusnak, hogy ismeri az SQL Server beépített adatbázis objektumait, ahhoz képes IntelliSense-t adni, hivatkozásokat ellenőrizni stb. Ehhez fel kell venni az objektumokat leíró .dbschema fájlokat referenciaként a projektbe:

Database references

Ez tökéletesen működött is x86-os gépen, ám amikor ugyanezt a projektet x64-en akartam fordítani, az alábbi hibaüzenetet kaptam:

“W:TFSMySolutionMySolution.sln” (Build target) (1) ->
“W:TFSMySolutionDatabaseDatabase.dbproj” (default target) (3) ->
(DspBuild target) –>
C:Program Files (x86)MSBuildMicrosoftVisualStudiov9.0TeamDataMicrosoft.Data.Schema.SqlTasks.targets(58,5):
Build error TSD00259: File C:Program FilesMicrosoft Visual Studio 9.0VSTSDBExtensionsSqlServer2008DBSchemasmaster.dbschema does not exist.
C:Program Files (x86)MSBuildMicrosoftVisualStudiov9.0TeamDataMicrosoft.Data.Schema.SqlTasks.targets(58,5):
Build error TSD00259: File C:Program FilesMicrosoft Visual Studio 9.0VSTSDBExtensionsSqlServer2008DBSchemasmsdb.dbschema does not exist.

És milyen igaza van, x64-en tényleg nincsenek .dbschema fájlok a C:Program Files mappában, mert a C:Program Files (x86) mappában vannak. A megoldás a project fájl kézi átírása. A hibás rész ez:

  <ArtifactReference
    Include="C:\Program Files\Microsoft Visual Studio 9.0\VSTSDB\Extensions\SqlServer\2008\DBSchemas\master.dbschema">

Írjuk át erre:

  <ArtifactReference
    Include="$(VSTSDBDirectory)\Extensions\SqlServer\2008\DBSchemas\master.dbschema">

Az msdb.dbschema fájllal ugyanezt kell eljátszanunk, utána fordulni fog a projekt mindkét architektúrán. Érdekes, hogy az Microsoft.SqlTypes.dbschema fájl útvonalát sikerült korrektül rögzítenie, csak a master és az msdb problémás.

Technorati-címkék: ,,,

TFS-t mindenkinek

Korábban már írtam arról, hogy a Dev10 hullámmal megváltozott az online és az offline MSDN is. A teljes képhez hozzátartozik, hogy az MSDN előfizetések is megváltoznak:

If you have this active subscription on March 22, 2010:

…then your subscription will become this:

…and you’ll get everything you had before, plus:

Visual Studio Team System Team Suite with MSDN Premium

Visual Studio 2010 Ultimate with MSDN

Visual Studio 2010 Ultimate, Team Foundation Server 2010 + CAL

Visual Studio Team System editions with MSDN Premium (Architecture, Database, Development, Test)

Visual Studio 2010 Ultimate with MSDN

Visual Studio 2010 Ultimate, Team Foundation Server 2010 + CAL

Visual Studio Professional with MSDN Premium

Visual Studio 2010 Premium with MSDN

Visual Studio 2010 Premium, Team Foundation Server 2010 + CAL

Visual Studio Professional with MSDN Professional

Visual Studio 2010 Professional with MSDN

Visual Studio 2010 Professional, Team Foundation Server 2010 + CAL

Visual Studio Professional with MSDN Embedded

Visual Studio 2010 Professional with MSDN Embedded

Visual Studio 2010 Professional

MSDN Operating Systems

MSDN Operating Systems

 

Lehetne még arról is írni, hogy az előfizetők a Windows Azure-ban mennyi időt, helyet és sávszélességet kapnak, de nem az itt a fontos szerintem. Egyszerűen nem lehet nem észrevenni, hogy a TFS – amit eddig csak külön lehetett megvenni – ott van szinte mindegyik előfizetésnél, és nem a Workgroup Edition az 5 felhasználós limitjével, hanem a teljes!

Ez szerintem óriási előrelépés, különösen, hogy a telepítés és az üzemeltetés lényegesen egyszerűbb lett. Immár kisebb fejlesztőcsapatok is könnyen használhatják, hiszen a Basic telepítőben (nem edition, csak a telepítő egyszerűsített változata) szinte csak Next-Next-Finish van, ráadásul most már lehet tartományvezérlőre, sőt kliens operációs rendszerre is telepíteni (nem mindenhol állnak hegyekben a szerverek). Ebben sincs felhasználó limit, de van source control, bug tracking és build automation! Aki pedig szeretne mindent szépen beállítani, az a Standard telepítővel mindent testreszabhat. Az üzemeltetés pedig MMC-ből történik, ahogy az kell.

Erről kár is sokat szövegelni, Brian Harry blogja tele van képernyőfotókkal, aki nem hiszi, nézze végig a képregényt itt és itt.

Van még kifogás?

Technorati-címkék: ,,

It’s time to kill – bugs

Halloween különkiadás a Channel 9 csapattól, ami bemutatja, mi történhet, ha egy sötét, ködös estén az embert egy határidőkkel küzdő szoftverfejlesztővel hozza össze a sors.

WARNING: This video contains blood, gore and one extremely frightening software developer.

http://channel9.msdn.com/posts/LauraFoy/Bug-Killer–A-Channel-9-Halloween-special/

Visual Studio 2010 Help Library Manager

Aki telepítette már a Visual Studio 2010 Beta 2-t, annak bizonyára feltűnt, hogy a telepítés végén lévő link, amivel az offline MSDN Library-t szoktuk telepíteni, nem kattintható. Most még csak disabled, de mire a VS 2010 RTM lesz, minden bizonnyal teljesen el fog tűnni ez a menüpont onnan.

A Dev10 Wave-vel (Visual Studio 2010, .NET4) ugyanis új MSDN-t is kapunk. Az online MSDN már 10 napja megváltozott, piros helyett immár kék a menő. Ennél kicsit hasznosabb, hogy végre kivezették azokat a funkciókat, amik korábban csak URL trükközéssel voltak elérhetőek. Például, ha egy MSDN-es URL végére odaírtuk, hogy (loband), akkor egy szkriptek nélküli oldal töltődött be, méghozzá villámgyorsan. Most már nem kell URL-t trükközni, a jobb alsó sarokban választhatjuk a ScriptFree nézetet. Ebben a nézetben egyedül azt nem szeretem, hogy minden nyelven megmutatja a metódus szignatúrákat és nem lehet szűrni. Ennél egy fokkal barátságosabb az új Lightweight nézet, ahol van szűrés, olvasható formázás, de még így is jó tempóban dolgozik.

Ami az offline MSDN-t illeti, azért fog eltűnni a Studio telepítő végéről az MSDN telepítő link, mert egy teljesen új komponens veszi át a helyét, a Help Library Manager. Őt a Start menüben, vagy a Visual Studio 2010 Help menüjében találjuk meg Manage Help Settings néven. Ha elindítjuk, először meg kell adnunk az offline súgó célkönyvtárát:

Help Library Manager - Location

Az OK gombra kattintva egy menü jön elő:

Help_Library_Manager-Menu

Itt a Find content online linkre kattintva böngészhetünk a letölthető tartalmak között:

Help_Library_Manager-Find_content_online

Én csak a .NET Framework 4.0-t választottam ki, majd az Update gombra kattintva 900 MB letöltése következett 38 komponens formájában. Ezután egy kis Merge indexing piszmogás és készen is vagyunk.

A Start menüből a Visual Studio 2010 Documentation menüpontot választva azonban nem a szokásos CHM-es help nézegető jön elő, hanem a kedvenc böngészőnk, a jobb alsó sarokban pedig elindul a Microsoft Help Listener, ami igencsak egy webszervernek tűnik és a böngészőben lévő URL-ek alapján a 80-as porton figyel. Ha véletlenül ül már ott egy processz, akkor a Connecten leírtak szerint némi registry matatással átköltöztethetjük a súgót másik portra.

Elsőre nagyon furcsa, hogy nincs Index fül, mindenre keresni kell és bár a keresés gyors, a találatok megjelenítése nem túl praktikus. Reméljük sokat javul még ez az RTM-ig, van mit szokni rajta.

Futtatás közvetlenül Solution Explorerből

Az egyik futó projektünkben elég sok batch fájlt írtunk a szokásos napi feladatok automatizálásra és miután meguntam, hogy a Visual Studioból nem lehet közvetlenül futtatni ezeket, hozzáadtam egy új menüpontot a Solution Explorer helyi menüjéhez.

Az első lépés, hogy a Tools –> External Tools ablakban fel kell vennünk egy új sort ezekkel a paraméterekkel:

External tools ablak

Így lesz egy Run with CMD menüpontunk a Tools menüben, amit nézzünk is meg, mert később szükségünk lesz arra, hogy a csoportján belül hányadik az új menüpontunk. Mivel ennek még körülményes a használata, lépjünk eggyel tovább. Szabjuk testre az eszközsávokat: View –> Toolbars –> Customize… (legalul). Kapcsoljuk be a Context Menus sort a Toolbars fülön:

Customize toolbars

Ennek hatására megjelenik az eszközsávokat testreszabó eszközsáv (na ez jó :). Hagyjuk nyitva a Customize ablakot és az eszközsávot tologassuk el úgy, hogy a lenyitott Tools menü ne fedje el a Project and Solution Context Menus elemet:

Project and Solution Context Menus toolbar

Nyissuk ki a Tools menüt és keressük ki az új parancsunkhoz tartozó External command sort – ugye mondtam, hogy meg kell jegyezni, hányadik a miénk 😉 Álljunk fölé az egérrel és a Controlt nyomva (mert csak másolni akarunk, nem mozgatni) dobjuk be ezt a sort a Project and Solution Context Menus menü Item ágába:

 Project and Solution Context Menus toolbar - Item

Zárjuk be a Customize ablakot, kész az új menüpontunk a Solution Explorerben. Hasonlóan létrehozhatunk menüpontot az SQL szkriptek közvetlen futtatására, csak ott a cmd.exe helyett mutassunk az sqlcmd.exe-re és ne felejtsük el az Arguments ablakot kitölteni.