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.