App_Code a DLL   zodpovězená otázka

ASP.NET WebForms

Ahoj.

Potřebovyl bych radu. Mám vytvořený solution a v něm web site a class library.

No a potřeboval bych kódem z class library používat nějaké věci které jsou v App_Code webu.

Jde to nějak?

Díky

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Trochu více to popište - co přesně potřebujete.Takhle ten popis vůbec nedává smysl.Do App_code se většinou přidává vlastně vytvořený kód.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Mám DLL, a v ní mám nějakou třídu s funkcemi. Tu DLL mám přidanou jako referenci v BIN adresáři webu.

Dál mám na tom webu složku App_Code, kde mám taky nějakou vlastní třídu a funkce.

Pokud chci kódem, který je v adresáři App_Code zavolat nějakou fci z DLL, prostě to napíšu jako MojeDLL.Trida.Funkce();

Ale já to chci opačně. Z DLL volat fci, která je v souboru umístěná v adresáři App_Code

Takže bych v DLL potřeboval právě něco jako: App_Code.Trida.Funkce();

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Musíte potom to, čo je v App_Code presunúť do knižnice.Alebo ak sa Vám nejakou zvláštnou náhodou podarí do knižnice pridať reference na webovú aplikáciu, čo sa Vám nepodarí(mám to odskúšané), tak potom to môžte spraviť bez presúvania.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Takže to nejde vyřešit jinak, než kód přesunout do knihovny?

nahlásit spamnahlásit spam 0 odpovědětodpovědět

A co přesně byste chtěl takto řešit? Mě nenapadá žádná situace,která by to vyžadovala.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Určité presuny budú nutné.Ale je jedna možnosť podobná tomu volaniu, a síce že v knižnici definujete udalosť , handler(metódu) na ňu dáte do app_code a budete ju vyvolávať z knižnice.Ale aj tak všetko použité ako argument musí byť v class library.Navyše je to 1. babračka , 2. z toho ľahko vznikne prasačinec a 3. to nie je nutné, ak jednoducho všetko presunete do class library.

Popíšte, čo vlastne robí metóda ktorú chcete volať z knižnice a aký význam má to volanie a už Vám niekto poradí, čo je vhodnejšie.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Tohle mám v jedné funkci v DLL:

Object Object_ = Activator.CreateInstance(this.GetType().Assembly.GetType(Directory_), ID);

Parametr v GetType(), tedy Directory_ je název třídy, která je na webu v App_Code.

Když tu třdu přesunu do knihovny, běží. Když jí dám do App_Data, tak ne. A právě bych to potřeboval přesunout do App_Code

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Převeďte Web Site na Web Application, ta se kompiluje do DLL knihovny, na níž je možné udělat referenci. Na WebSite to njde.

Kód nefunguje, protože ten typ hledáte na assembly, ve které je definovaná třída instance this.

Na hledání ve všech assemblies můžete použít Type.GetType("namespace.název_typu, název_assembly"), ale půjde to jen, pokud je assembly webové aplikace načtena, tj. buď použijete Web Application a nareferencujete ji z DLLky, anebo u Web Site jen v případě, že kód v knihovně spouštíte z webové aplikace. Pokud DLL knihovnu použijete z jiného projektu, už to tu třídu samozřejmě nenajde.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Díky za odpověd.

Jen ještě dotaz, jak převést Web Site na Web Application?

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Vytvořit nový projekt typu Web Application (v menu Visual Studia ne New / Web Site, ale New / Project), nakopírovat do něj všechny soubory z Web Site a v solution exploreru kliknout na projekt a dát Convert to Web Application, aby se pro soubory dogenerovaly .designer soubory.

Po každé změně v aplikaci musíte zmáčknout Ctrl-Shift-B, pokud se chcete podívat v prohlížeči, jak stránka vypadá (anebo pouštět F5kou), aby se aplikace zkompilovala. Web Site tohle nepotřebuje, protože si změny najde a zkompiluje až při požadavku z prohlížeče, ale u Web Application to musíte překompilovat ručně.

A soubory s kódem už nemusí být ve složce App_Code, resp. ta složka se může jmenovat jinak.

Na webserver pak stačí nakopírovat složku bin, app_něco a všechny ascx a aspx soubory (ty ascx.vb nebo ascx.cs už nemusíte). Ideální je ve VS použít publish.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Díky

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback