Nezkousejte to pres GAC. Nejde to. Jedine reseni a to jeste polovicate ktere jsem nasel je toto:
1. Vytvorte si sdilene sestaveni v C#(nebo VB.NET, budu psat jen C#, melo by to byt stejne) nebo C++(C++ se rozumi CLI). Dejte do nej libovolne tridy ktere chcete. Nezapomente ale kazdou tridu(…) oznacit public, takze v C++ to bude:
1 2 3 |
public ref class TF { } |
a v C#:
1 2 3 |
public class TF { } |
Castecne tridy nejsou podporovany v C++. Staticke tridy zase se nedaji dedit. Definujte si(klidne si zmente sablonu noveho projektu) tridy ktere se budou jmenovat stejne jako ty v tom sdilenem ale treba s 2 na konci.
1 2 3 4 5 6 |
public class TF2 : TF { public void NovaMetoda() { } } |
Pak muzete v kodu volat pod “TF2” jak metody ktere jste definovali v tomto sestaveni nebo ve sdilenem. Samozrejme takto, pokud musite nebo chcete muzete ve sdilenem sestaveni definovat virtualni metody nebo abstraktni tridy a ty pak v kazde app kde to budete potrebovat odvodit. Dalsi moznost je pouzit rozhrani.
1 2 3 |
TF2 tf = new TF2(); tf.NovaMetoda(); tf.NejakaMetoda8("", ""); //-Volam metodu ktera je ve sdilenem sestaveni |
Kdyz budete chtit stejnou metodu (…) pouzit i v jinem projektu, staci ji dat do toho sdileneho a zkompilovat. No a pak(protoze VS si zrejme nactene reference drzi v pameti) vypnout a loadnout projekt(v VC++) nebo cele reseni(VC#). Bez toho mi to proste nefungovalo ani kdybych se …… … Samozrejme pokud mate VS tak muzete si napsat addin ktery vam to sam prekopiruje do sdileneho sestaveni a treba i zkompiluje pri ukonceni.
My chudsi v Visual Studio Express si na to muzeme taky delat program ale nebude to delat automaticky – leda ze by kontroloval treba co 5 minut na nove prvky a ty kopiroval – ale i to je osemetne, co kdyz zrovna budete psat void metodu kde zrovna to bude ve stavu kdy ukoncite prikaz a vas program si bude myslet ze to je hotova metoda?
Nemuzete asi spolehat na to ze vzdycky nechat posledni metodu v *2 souboru.. Ted k nastaveni IDE. Tento priklad byl situovany pokud mate sdileny projekt v C++/C# a ostatni v C#. Pokud mate sdileny v C++, doplnte do jeho vlastnosti v Post-Build Event toto: copy /Y /V “$(TargetPath)” “D:\MSDN\GAC$(TargetFileName)” D:\pa\freepbdfreepdb.cmd $(ProjectName) D:\MSDN\GAC nahradte cestou kde mate sdilene assembly.
D:\pa\freepbdfreepdb.cmd je skript bash na uvolneni nandleru pbd souboru, ktery si z nejakeho duvodu VC++ obsadi a program pak nejde zkompilovat. Ja mam tento radek i v Pre-Link Event a funguje. U C# staci jen radek prvni: copy /Y /V “$(TargetPath)” “D:\MSDN\GAC$(TargetFileName)” A ted si muzete vybrat. Bud budete odkazovat primo na tu assembly v D:\MSDN\GAC a nebo vytvorite symbolicky link.
Ja pro svuj projekt ho vytvoril 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
Muzete si jej ale i vytvorit treba v slozce projektu – to se mi zda optimalni – prece jen se proklikat od 2 vyse(do slozky reseni a pak projektu) je snazsi nez najit slozku ktera je na uplne jinem disku. Navic pokud zmenite nazev dll nebo cestu zmenite pouze jeden symbolicky link. Nicmene jsem to zatim nezkousel ale melo by to fungovat jako ve slozce projektu.