Sdílení zdrojového kódu
-
26. února 2008 13:09Používám Visual studio 2005 a mám 3 projekty .
1.Windows Application - hlavní projekt 1
2.Device Application for Windows CE - hlavní projekt 2
3.Společný - zde mám umístěn společný kód pro obě aplikace
v této aplikaci mám třídy označeny stajně jako v hlavních projektech,ručně jsem "přilinkoval" do "hlavni1.csproj"Chci se zeptat jestli existuje nějaké jiné řešení,resp. jestli tento problém je řešen ve VS 2008 nebo existuje-li jiný způsob
soubory ze společného projektu např. <Compile Include="..\Common\Form1Common.cs" /> a třídu označil jako partial.
V hlavním projektu se mi objeví odkaz na soubor "..\Common\Form1Common.cs",což je ok.
Pokud je třída v hlavním projektu nazvaná stejně jako ve společném projektu a zároveň je to Formulář, poklepem na
"..\Common\Form1Common.cs" se mi otevře Form z hlavního projektu a při editaci se objeví hláška, že mi chybí soubor s resources.Pokud otevřu pouze kod, vše funguje OK.
řešení tohoto problému.
Zrekapituluji požadavek:
V hlavním projektu chci řešit interfacové(záležitosti prostředí-formuláře...atd,závislé od platformy),
ve společné části bych chtel mít částčný(partial) kód třídy nezavislý na platformě(např. výpočty).
Prosim o radu jak to zařídit.
Děkuji za reakce.
Petr
Všechny reakce
-
26. února 2008 19:19Moderátor
Dobrý den,
pro společný kód jsou určeny projekty typu ClassLibrary, které referencujete z dalších projektů, kde chcete společnou funkčnost využívat. Není zde vhodné trvat na partial třídách, jejichž použití je jiné. Výpočty jsou naopak tipicky umístěny v samostatných třídách reprezentujících aplikační logiku a společný projekt pak představuje aplikační vrstvu systému.
-
27. února 2008 12:02Dobry den
dekuji za odpoved.
ClassLibrary je dobre reseni pro spolecny kod, ktery zpetne nevola metody property hlavniho programu.
Napr.:
Common-spolecna cast:
partial class Formular
{
public System.Data.DataSet MyDataSet=new System.Data.DataSet();
public void InitCommon()
{
//inicializuji timer ktery vola RefreshData
}
public void RefreshData()
{
this.LoadData()
if (MyDataSet.Tables[0].Rows[0][0]==1)}
{
this.Hide()
}
}
Windows Aplikace
public partial class Formular : Form
{
public Formular()
{
InitializeComponent();
InitCommon();}
public LoadData()
{
//tableadapter + napojeni na SQL server......
Adapter.Fill(MyDataSet);}
}
Device Aplikace
public partial class Formular : Form
{
public Formular()
{
InitializeComponent();
InitCommon();}
public LoadData()
{
MyDataSet.Tables[0].Rows[0][0]=1;//vyplnim dalsi data}
}
Tento priklad je jenom demonstrativni v praxi je to slozitejsi.
Diky za reakci
Petr -
27. února 2008 13:41Moderátor
Oba formuláře Vám dědí z třídy Form, nejspíš System.Windows.Form, tak si prostě udělejte v ClassLibrary společného předka obou těchto formulářů nějaké
Code Snippetpublic class FormularBase : Form
{
... společné ...
... něco virtual ...
}
a v samotné platform-specific assembly pak dědíte z tohoto FormularBase
Code Snippetpublic class Formular : FormularBase
{
... platformě specifické ...
... nějaký ten override, atp. ...
}
...jenom pak nedoporučuji do této společné class-library dávat nějakou business či datovou logiku, taková assembly s třídami Forms patří k prezentační vrstvě.
-
29. února 2008 8:22Diky za odpoved,
Potreboval bych popis tagu v *.csproj. Nevite kam se podivat?
Diky
Petr