Logo Kurzy výpočtovej techniky

E-mail:

Telefón:

kurzy@ipex.sk

02 5810 1410

Solution a project

Solution

Solution je jeden alebo niekoľko projektov, ktoré spolu nejako súvisia a vyvýjate ich súbežne. Jeden z nich býva označený ako hlavný a ostatné obvykle tvoria nejakú hierarchiu vzájomných závislostí. Závislosti vznikajú vzájomnými referenciami, takže napr. hlavný projekt A referencuje podriadené projekty B, C a D, a projekt B referencuje projekt D. Referencia z projektu A do projektu B znamená, že v projekte A môžeme používať „public“ prvky z projektu B (nie naopak). Príklad si ukážeme ďalej.

Ak vo VS stlačíte F6, prebildujú sa všetky projekty, v ktorých ste niečo zmenili od posledného bildu. Ak stlačíte F5, urobí sa to isté a v prípade úspechu sa rozbehne hlavný program (ak je to exe).

Kliknite „pravou myšou“ na solution v okne Solution Explorer a pozrite si jeho vlastnosti. Všetky sú uložené v súbore „KurzCon.sln“ vo formáte XML. Druhý súbor „KurzCon.suo“ je binárny a obsahuje niečo ako FoxUser pre vývojové prostredie. Možno tento súbor nevidíte, lebo v súborovom systéme je označený ako skrytý.

Project

Project je zbierka programových prvkov (zdrojákov) a ďalších súborov rôzneho druhu, z ktorých po zbildovaní vznikne jedno tzv. Assembly - exe alebo dll (podľa typu projektu).

Doplnené:

Kliknite „pravou myšou“ na projekt v okne Solution Explorer a pozrite si jeho vlastnosti. Všimnite si, že tu môžete nastaviť cieľový .NET Framework pre preklad a beh programu. Ak tu nastavíte napr. .NET Frameworku 2.0, na beh vášho programu bude stačiť táto verzia. Ale VS vám zároveň obmedzí vývojové prostredie, vymení referencované systémové knižnice a kadečo vám možno začne hlasiť kompilačné chyby.

Pri prechode na VS 2010 zo starších verzií vývojového prostredia sa vám automaticky skonvertujú všetky projektové súbory a môžu sa zmeniť aj niektoré zdrojáky. Ale výsledný projekt by sa mal dať zbildovať ako predtým. Vo vlastnostiach prevedených projektov však odporúčame nastaviť .NET Framework 4.0 - teda ak vaši používatelia majú aspoň trochu slušné počítače a vedia si to doinštalovať (napr. cez Windows Update).

Pamätajte na to, že niektoré vlastnosti jazyka C# sú k dispozícii len v najnovšej verzii VS a nemusia sa dať skompilovať pre všetky staršie verzie .NET Framework Napr. voliteľné parametre metód s preddefinovanými hodnotami prinieslo až VS 2010. A vie ich skompilovať pre .NET Framework 4.0 aj 3.5 (staršie som neskúšal).

Doterajšie cvičné projekty a ich premenovanie

Po inštalácii VS sme si vytvorili 2 cvičné projekty s názvami CsVfpCon a CsVfpWin. Teraz chcem vytvoriť ďalší s názvom CsVfpLib, ale začína mi dochádzať, že tieto názvy sú príliš zložité a nepekné. Ukážeme si preto ako sa dajú premenovať tieto už hotové solutions a projekty na KurzCon a KurzWin. A potom si zriadime solution KurzLib.

Ďalej uvedený postup premenovania projektov patrí skôr do „vyšší dívčí“ a nie na prvé stránky kurzu pre začiatočníkov. Ale keďže vy ste už pokročilí programátori, nakoniec som sa odhodlal ho použiť:

  1. Zatvorte obidva projekty vo VS.
  2. V súborovom systéme zájdite do domovského adresára nášho kurzu - u mňa je to „S:\Kurzy\CsVfp“. V názve tohto adresára zostane skratka CsVfp, ale podadresáre ideme meniť. Najprv projekt CsVfpCon:
  3. Premenujte podadresár s celým solution CsVfpCon na KurzCon a rovnako premenujte aj súbory .sln/.suo, vnútorný podadresár s projektom a projektové súbory .csproj/.csproj.user.
  4. Zmažte podadresáre bin a obj - po bilde sa vytvoria znova (zostalo by v nich zopár súborov so starým názvom).
  5. Naštartuje VS, ale neotvorte v ňom žiadny projekt.
  6. Tlačidlom Open File na paneli nástrojov otvorte solution s názvom „KurzCon.sln“ - ALE NIE na bežný design - potrebujeme ho editovať vo formáte XML. Dosiahnete to tak, že súbor otvoríte nie priamo tlačidlom Open, ale rozbalíte malú šípku pri tomto tlačidle, v ponuke vyberiete Open With a potom „XML (Text) Editor“.
  7. V hornej časti textu uvidíte názov projektu a cestu k projektovému súboru (zvýraznené) - tie zmeňte na KurzCon:
    Microsoft Visual Studio Solution File, Format Version 11.00
    # Visual C# Express 2010
    Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CsVfpCon", "CsVfpCon\CsVfpCon.csproj", "{0DD0E124-43E9-49E5-B160-7C289DBA7F36}"
    EndProject ...
  8. Zmeny uložte a súbor zavrite. Potom solution a projekt otvorte bežným spôsobom na design.
  9. Otvorte vlastnosti projektu a na prvej karte zmeňte názov assembly na KurzCon a default namespace na Kurz.Con - s bodkou ! (podrobnejšie vysvetlenie bude v nasledujúcej lekcii)
  10. Týmto sme zmenili „default namespace“ pre projekt, takže všetky programové prvky, ktoré do projektu neskôr vložíme, ho prevezmú. Zostáva ešte opraviť namespace v už existujúcich prvkoch: Otvorte Program.cs, v riadku „namespace CsVfpCon“ vyberte starý názov namespace (dvojklikom), stlačte Ctrl+F na hľadanie a náhradu textov, stlačte Quick Replace a doplňte nový text „Kurz.Con“ (s bodkou), Look in nastavte na Entire Project a stlačte Replace All. Našťastie, nahrádzaný reťazec CsVfpCon je taký špecifický, že hromadná náhrada nie je riskantná.
  11. Spustite program tlačidlom F5 - mal by fungovať.
  12. Rovnako premenujte aj druhý projekt CsVfpWin na KurzWin.

Ospravedlňujem sa za tento zložitý postup - jednoduchší nepoznám (nehľadal som). Ak niekto poznáte lepší, napíšte nám. Myslím, že kroky č. 6 a 7 by sa dali obísť tak, že po premenovaní projektového adresára a projektových súborov otvoríte rovno „na drzovku“ premenované solution (dvojklikom) a keď vám povie, že nevie nájsť projekt, ukážete mu ho v premenovanom adresári. Ak to chcete skúsiť, celé solution si najprv zazálohujte.

Mrzí ma, že som Vás zaťažil takouto hrôzou, ale ideme sem nabaľovať ďalší software, tak som chcel nastaviť správny smer radšej teraz ako neskôr. Ale aspoň ste videli „vnútro“ súboru solution a rovnako by ste mohli nazrieť aj do súboru projektu (budú chvíle, keď sa to zíde).

Ak sa vám niečo nepodarilo a projekty „sa rozsypali“, na konci tejto stránky nájdete download mojej verzie všetkých projektov.

Nový projekt - Windows Class Library

Aby sme si ukázali referencovanie projektov v praxi a vytvorili miesto, kam budeme písať univerzálnejšie nástroje, ktoré môžeme použiť vo viacerých projektoch, založíme si teraz knižničný projekt:

  • základný adresár - u mňa „S:\Kurzy\CsVfp“
  • názov projektu - KurzLib
  • vlastnosti projektu - default namespace nastavte na „Kurz.Lib“ - s bodkou

Class1, ktorý vznikol v projekte automaticky, premenujte na LibMess a jeho zdrojový kód upravte takto:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

 

using System.Windows.Forms;

 

namespace Kurz.Lib

{

    public enum LibMessIcon { Information, Warning, Stop }

 

    public static class LibMess

    {

        public static void Ok(object oText, LibMessIcon eIcon = LibMessIcon.Information)

        {

            MessageBox.Show(oText.ToString().Replace(";", "\r\n"),

                            "Oznam",

                            MessageBoxButtons.OK,

                            eIcon == LibMessIcon.Stop    ? MessageBoxIcon.Stop :

                            eIcon == LibMessIcon.Warning ? MessageBoxIcon.Warning :

                                                           MessageBoxIcon.Information);

        }

 

        public static bool Yes(object oText, bool bDefault = false)

        {

            return MessageBox.Show(oText.ToString().Replace(";", "\r\n"),

                                   "Otázka",

                                   MessageBoxButtons.YesNo,

                                   MessageBoxIcon   .Question,

                                   bDefault ? MessageBoxDefaultButton.Button1 :

                                              MessageBoxDefaultButton.Button2)

               == DialogResult.Yes;

        }

    }

} 

Táto trieda obsahuje 2 jednoduché metódy, ktoré komunikujú s používateľom pomocou triedy MessageBox. Metóda Ok() len zobrazí nejakú správu a Yes() si na niečo pýta súhlas. Kód si podrobnejšie vysvetlíme neskôr - teraz to zoberte len ako „čiernu krabičku“, ktorú použijeme niekde inde.

Skúste to zbildovať - hlási to chybu ? A ani ten MessageBox vám nesvieti na zeleno ?

Nuž áno, takýto knižničný projekt sa dá vytvoriť na všelijaké účely, a tak tam VS automaticky nevkladá veľa referencií. Nám konkrétne chýba referencia na namespace „System.Windows.Forms“. Rozbaľte preto v projekte riadok References, pravou myšou vyberte Add reference a na karte .NET vyhľadajte potrebný riadok. Kliknutím na záhlavie Component Name môžete vylepšiť abecedu :-)

Potom zdroják dostane farbičky a dá sa zbildovať. Výseldný súbor KurzLib.dll vznikne v podadresári bin\Release a dá sa následne použiť v inom projekte.

Ale zájdime ešte do vlastnosti projektu a na karte Build Events doplňte nasledovný príkaz do okienka Post-build event command line:

  • copy "$(TargetDir)$(TargetName).???" "$(SolutionDir)\Dll\" /y

A v súborovom systéme doplňte podadresár Dll tam, kde sa nachádza súbor KurzLib.sln - na úrovni sulution. Potom dajte projekt zbildovať a v adresári Dll nájdete súbory KurzLib.dll a KurzLib.pdb. Prvý v nich môžete referencovať z iných projektov, druhý z nich obsahuje nejaké sprievodné dáta k dll, ktoré sá zídu tuším len pre Debuger - netreba ho distribuovať so samotnou knižnicou do prevádzky programu.

Referencia na KurzLib.dll

Vráťme sa teraz k projektu KurzWin a ukážeme si použitie vyššie uvedených metód z externého projektu KurzLib:

  1. Rozbaľte v projekte riadok References, na karte Browse nájdite súbor „S:\Kurzy\CsVfp\KurzLib\Dll\KurzLib.dll“ a zaraďte ho do projektu.

  2. Tým sme povedali VS, že hociktorý programový prvok v našom projekte môže využiť čokoľvek z knižnice KurzLib, a že vedľa súboru KurzWin.exe v runtime vždy musí ležať aj súbor KurzLib.dll.

Poďme teraz použiť metódu Yes() na formulári frmHop. Pravou myšou v projekte na tomto formulári otvorte programový kód a niekam medzi iné metódy vložte túto metódu:

        protected override void OnClosing(CancelEventArgs e)

        {

            e.Cancel = !LibMess.Yes("Chcete zavrieť tento formulár ?");

 

            base.OnClosing(e);

        } 

Vravíte, že LibMess nie je zelený ? Áno, knižnicu sme síce zaradili do projektu, ale kompilátoru sme ešte nepovedali, že niečo z nej chceme použiť v tomto zdrojáku. Do úvodného zoznamu príkazov using doplňte ešte tento riadok:

using Kurz.Lib;

Teraz už trieda LibMess a jej metóda Yes() sú pripravení nám poslúžiť.

Tlačidlom F5 naštartujte program, z menu vyvolajte formulár Hop a potom ho skúste zavrieť...

Záver

Aj v tejto kapitole som použil programový kód bez bližšieho vysvetlenia. Samozrejme, neskôr sa na tieto príklady odvolám a všetko podrobne vysvetlím, ale teraz by ma celkom zaujímalo, čo z toho kódu dokážete pochopiť intuitívne na základe všeobecných programátorských znalostí ? :-)

Ak ste niečo nestihli, tu si môžete prevziať všetky 3 projekty, ako som ich urobil ja: CsVfp.zip 

Copyright © 1997-2018  Ipex IT, s.r.o. Stránka aktualizovaná:  15.02.2011, 14:00