2017. augusztus 12., szombat

Hiányzó Google API verzió Android Studio-ban

Andriod Studioban szerettem volna betölteni egy projektet, de elakadt, mondván, nem található a "Google API X verzió". Segítőkészen felajánlotta, hogy az SDK managerrel letölthető. Ennek megfelelően cselekedtem, majd örömmel nyugtáztam a kezelőben, hogy az állapota "installed", így ismét rápróbáltam a projektre, viszont a hibaüzenet ismét jelentkezett.



Az SDK managerben a "Show package details" gombot kattintva jött elő a kapcsolódó komponensek listája, amiben látszott, hogy valóban nincs minden telepítve. A részleteknél kellett egyesével kipipálni, hogy tegye fel a kívánt elemeket is. Ezt követően már sikeresen lefutott a betöltés.



Tanulság a történetből, hogy a fordító nem hazudik: ha azt mondja, hogy valami nincs telepítve, akkor az tényleg nincs, függetlenül attól, hogy az SDK manager azt írja, hogy "installed", amiből az átlagember jogosan hihetné, hogy márpedig telepített.

2017. július 11., kedd

Egér/billentyűzet közvetlen csatolása VMWARE alá

Beruháztam egy Logitech vezeték nélküli programozható gombokkal rendelkező egérre. Amikor megpróbáltam egy VMWARE virtuálisgép alatt is használni, akkor szembesültem vele, hogy a VM csak az alap három gombot értelmezte és az extra gombokra vagy semmit nem csinált vagy pedig valamilyen karakterként értelmezte. 

Feltelepítettem a VM alá is az egér vezérlőprogramját, végtére is ilyen szempontból az egy teljes értékű, független gép, így jogosan hiányolhatja. A telepítést követően azzal fogadott a VM alatt, hogy nem talált megfelelő eszközt.

Hiába kapcsoltam be a konkrét VM beállításai között, hogy mindegyik elérhető USB eszközt lássa, a vevőegységet továbbra sem érzékelte.




A .vmx fájlba kellett az alábbi bejegyzéseket hozzáadnom:

mouse.vusb.enable = "TRUE"
mouse.vusb.useBasicMouse = "FALSE"
usb.generic.allowHID = "TRUE"
usb.generic.allowLastHID = "TRUE"

A negyedik beállítás nélkül is látszott már az USB-s vevőegység a VM számára, de nem engedte hozzárendelni, mondván, a gazdarendszernek szüksége van rá, mivel ez egy beviteli eszköz. Miután a negyediket is hozzáadtam, csak egy figyelmeztetés dobott fel, hogy ha ezt megteszem, akkor a gazdarendszer egy inputtal szegényebb lesz. Ez egy fontos információ, tehát csak olyan esetben ajánlott ezt a megoldást választani, ahol van még legalább egy "tartalék" is az adott eszközből (legyen az egér vagy billentyűzet), mert ezzel a módszerrel kizárólagosan a VM fogja kezelni.

2017. június 24., szombat

XAMARIN app nem indul eszközön debugban

Visual Studio-val szerettem volna egy XAMARIN.FORMS alkalmazást Android telefonon tesztelni, de az alábbi hibaüzenet fogadott:

The application could not be started. Ensure that the application has been installed to the target device and has a launchable activity (MainLauncher = true).
Additionally, check Build->Configuration Manager to ensure this project is set to Deploy for this configuration.

Attól függetlenül, hogy sikeresen lefordult és a deploy során sem panaszkodott semmire, mégsem találta meg a telefonon az alkalmazást. Az eszköz főmenüjét megnézve, valóban nem volt indítóikon. A helyzetet tovább bonyolította, hogy nem mindegyik eszköz reagált így, volt, amelyiken ment. Ráadásul a problémások másik gépen jól működtek.

A vizsgálódás során kipróbáltam, hogy ha másik csomagazonosítót állítok be, akkor mit reagál. Az új azonosítóval gond nélkül elindult mindegyik eszközön.

A problémás eszközökön mindegyiknél megtaláltam az Alkalmazások listájában a régi csomagazonosítóval az appot, tehát valamilyen formában már telepítve volt egy verzió. Végül összeállt a kép: a Visual Studio-val történő telepítés során - számomra ismeretlen célból - valamilyen egyedi azonosítót is generál az alkalmazásba - talán a Fast Deploymenttel lehet összefüggésben -, ami megakadályozza, hogy egy másik VS rá tudjon frissíteni a már telepített verzióra.

A megoldás az volt, hogy kézzel el kellett távolítani a korábbi verziót, ami a másik VS-től származott és azt követően mindegyik készüléken működött.

2017. június 23., péntek

Entity Framework cache frissítése

Entity Framework 6-ban a DbContext automatikusan cache-eli az adatokat, ami az esetek jelentős részében teljesen jó dolognak számít. Azonban vannak olyan szituációk, amikor az elérni kívánt adatok az aktuális contexten kívül már megváltoztak (például másik felhasználó módosította vagy tárolt eljárás ért hozzá). 

Több lehetőség is létezik a helyzet kezelésére:
1. A követés kikapcsolása az AsNoTracking() utasítással
2. Régi DbContext példány eldobása és új létrehozása
3. ObjectQuery használata a MergeOptions beállításával a DBQuery helyett
4. Elem frissítése (Reload / Refresh)
5. Elem leválasztása (Detach)
6. GetDatabaseValues hívás, hogy egy adott Elem (Entity) frissítve legyen
7. A régi adatok használata

Ezen a linken részletesen körbejárják az egyes lehetőségeket, hogy melyiket mikor is éri meg használni. 

2017. június 15., csütörtök

Visual Studio 2015 Crossplatform - hiányzó Xaml Page template

Visual Studio 2015 és Xamarin páros telepítését követően találkoztam azzal a jelenséggel, hogy hiába adtam a projekthez bármilyen új XAML Page vezérlőt, minden esetben csak egy C# fájlt készített, de XAML-t sosem. A probléma feloldásához a hiányzó sablonfájlt át kellett másolni a Xamarin alól a VS ItemTemplates mappájába.

Innen kell átmásolni:
C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\Extensions\Xamarin\Xamarin\
<verzió>\T\IT\Cross-Platform\Code\XamlPage.zip

Ide:
C:\Users\<felhasználó>\Documents\Visual Studio 2015\Templates\ItemTemplates\
Visual C#\XamlPage.zip

Ezt követően a "Cross-Platform" szekcióban lehetett kiválasztani a "Forms Xaml Page" elemet.

2017. június 12., hétfő

SSRS Riport nyomtatásakor mező elrejtése

Gyakorta felmerül az igény arra, hogy egy vagy több elemet (felirat, link, stb.) nem szeretnénk, hogy megjelenjen az SSRS riportok nyomtatásakor vagy exportáláskor. Ebbe a kategóriába tartozik szinte az összes interaktív vezérlő. Jó példa egy "Tovább a kapcsolódó elemekre" link, ami egy subreportot tölt be, viszont PDF-ben már csak zavaró tényezőnek számít a felirat.

Az SSRS-ben elérhető egy globális változó (RenderFormat.IsInteractive), ami megmondja, hogy éppen interaktív módban van-e betöltve az adott riport. Erre a tulajdonságra kell beállítani az elrejteni kívánt elemek láthatóságát:  =(Globals!RenderFormat.IsInteractive = False)


2017. június 7., szerda

Visual Studio class template módosítása

Sokunkban felmerülhetett már a gondolat, amikor egy új osztályt adtunk egy projekthez Visual Studioban, hogy miért lesz privát és miért kell kézzel átállítani publikusra? Az esetek jelentős részében úgyis publikus szükséges.

Könnyedén megoldható ez a probléma, mivel minden, amit hozzá lehet adni új elemként a VS-ben, az egy sablonfájlból ered. Ebből adódóan az új osztályhoz is tartozik egy ilyen sablon, amelyben át lehet írni a láthatóságot. A fájlt rendszergazdai jogosultsággal kell megnyitni szerkesztésre.

Visual Studio 2010 és előtte: 
C:\Program Files (x86)\Microsoft Visual Studio 9.0\Common7\IDE\ItemTemplates\CSharp\
Code\1033\Class.zip

A Class.zip-ben szereplő fájlba kell beleírni a public kulcsszót. Ezt követően egyszer ezzel paraméterrel kell indítani a Visual Studio-t, hogy frissüljön a cache: /installvstemplates

Visual Studio 2012 és felfelé: 
C:\Program Files (x86)\Microsoft Visual Studio <verzió>\Common7\IDE\ItemTemplates\CSharp\
Code\1033\Class.cs

Az újabb verzióknál elegendő csupán módosítani a C# fájlt, nincs szükség tömörítésre illetve a cache frissítésére.