Jak mít v jednom sestavení sdílené třídy každého programu a v druhém program?

Nezkoušejte to přes GAC. Nejde to. Jediné řešení a to ještě polovičaté které jsem našel je toto:
1. Vytvořte si sdílené sestavení v C#(nebo VB.NET, budu psát jen C#, mělo by to být stejné) nebo C++(C++ se rozumí CLI). Dejte do něj libovolné třídy které chcete. Nezapomeňte ale každou třídu(…) označit public, takže v C++ to bude:

C#
public ref class TF
{
}

a v C#:

C#
public class TF
{
}

Částečné třídy nejsou podporovány v C++. Statické třídy zase se nedají dědit. Definujte si(klidně si změňte šablonu nového projektu) třídy které se budou jmenovat stejně jako ty v tom sdíleném ale třeba s 2 na konci.

C#
public class TF2 : TF
{
    public void NovaMetoda()
    {
    }
}

Pak můžete v kódu volat pod „TF2“ jak metody které jste definovali v tomto sestavení nebo ve sdíleném. Samozřejmě takto, pokud musíte nebo chcete můžete ve sdíleném sestavení definovat virtuální metody nebo abstraktní třídy a ty pak v každé app kde to budete potřebovat odvodit. Další možnost je použít rozhraní.

C#
TF2 tf = new TF2();
tf.NovaMetoda();
tf.NejakaMetoda8("", ""); //-Volam metodu ktera je ve sdilenem sestaveni

Když budete chtít stejnou metodu (…) použít i v jiném projektu, stačí ji dát do toho sdíleného a zkompilovat. No a pak(protože VS si zřejmě načtené reference drží v paměti) vypnout a loadnout projekt(v VC++) nebo celé řešení(VC#). Bez toho mi to prostě nefungovalo ani kdybych se …… … Samozřejmě pokud máte VS tak můžete si napsat addin který vám to sám překopíruje do sdíleného sestavení a třeba i zkompiluje při ukončení.

My chudší v Visual Studio Express si na to můžeme taky dělat program ale nebude to dělat automaticky – leda že by kontroloval třeba co 5 minut na nové prvky a ty kopíroval – ale i to je osemetné, co když zrovna budete psát void metodu kde zrovna to bude ve stavu kdy ukončíte příkaz a váš program si bude myslet že to je hotová metoda?

Nemůžete asi spoléhat na to že vždycky nechat poslední metodu v *2 souboru.. Teď k nastavení IDE. Tento příklad byl situovaný pokud máte sdílený projekt v C++/C# a ostatní v C#. Pokud máte sdílený v C++, doplňte do jeho vlastností v Post-Build Event toto: copy /Y /V „$(TargetPath)“ „D:\MSDN\GAC$(TargetFileName)“ D:\pa\freepbdfreepdb.cmd $(ProjectName) D:\MSDN\GAC nahraďte cestou kde máte sdílené assembly.

D:\pa\freepbdfreepdb.cmd je skript bash na uvolnění handleru pbd souboru, který si z nějakého důvodu VC++ obsadí a program pak nejde zkompilovat. Já mám tento řádek i v Pre-Link Event a funguje. U C# stačí jen řádek první: copy /Y /V „$(TargetPath)“ „D:\MSDN\GAC$(TargetFileName)“ A teď si můžete vybrat. Buď budete odkazovat přímo na tu assembly v D:\MSDN\GAC a nebo vytvoříte symbolický link.

Já pro svůj projekt ho vytvořil takto: F:\Documents\Visual Studio 2005\Projects\temp\OP\temp\OP\bin\Release>mklink „F:MonaVi sual Studio 2005ProjectstempOPtempOPswf.dll“ „D:\MSDN\GAC\swf.dll“ symbolic link created forF:\Mona\Visual Studio 2005ProjectstempOPtempOPswf. dll <===> D:\MSDN\GAC\swf.dll

Můžete si jej ale i vytvořit třeba v složce projektu – to se mi zdá optimální – přece jen se proklikat od 2 výše(do složky řešení a pak projektu) je snazší než najít složku která je na úplně jiném disku. Navíc pokud změníte název dll nebo cestu změníte pouze jeden symbolický link. Nicméně jsem to zatím nezkoušel ale mělo by to fungovat jako ve složce projektu.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *