Je všeobecně známo, že ve webových aplikacích je možné různé stránky psát v různých jazycích. Jednu stránku můžete mít třeba v C#, druhou ve VB.NET a třetí v F#. Každá stránka se zkompiluje do samostatné assembly a nezáleží na tom, jaký byl původn jazyk – CLI si s tím poradí.
Shora uvedené assemblies se ovšem "navzájem nevidí". Vzhledem k možnosti kompilace on demand se ve web site projektech nemůžete odkazovat z jedné třídy ASPX stránky na jinou. Sdílené třídy je tedy nutné uložit do samostatného adresáře App_Code, který se kompiluje jako první a zvlášť.
Dlouho jsem si myslel (a tento názor též šířil dále), že zde možnost používat více jazyků současně končí. Inu, nekončí. Prostor adresáře App_Code totiž lze rozdělit pomocí podadresářů a v konfiguraci určit, že se budou kompilovat samostatně. A v každém z těchto podadresářů je pak možné mít kód v jiném jazyce.
Můžete si tedy vytvořit strukturu projektu podobně, jako na obrázku. V adresáři App_Code vytvořte podadresáře cs a vb (je nicméně jedno, jak se budou jmenovat).
Potom v souboru web.config přidejte názvy adresářů do /configuration/system.web/compilation/codeSubDirectories:
<configuration>
<system.web>
<compilation>
<codeSubDirectories>
<add directoryName="cs" />
<add directoryName="vb" />
</codeSubDirectories>
</compilation>
</system.web>
</configuration>
A k čemu je to všechno dobré?
Logická otázka se nabízí: a k čemu je to všechno dobré? Napadají mne tři využití:
- Hotový subsystém, který je k dispozici pouze v jiném jazyce, než je ten váš. To se typicky týká VB.NET programátorů, neboť množství modulů je k dispozici jenom v C#. Použití code subdirectory může být jednodušší, než vytváření a referencování samostatné class library.
- Ne všechny jazyky jsou si rovny. Kromě VB.NET a C# je tu i funkcionální F# a dynamické jazyky typu IronPython a IronRuby. Vyznačují se typicky výhodností pro určité typy úloh a faktickou nepoužitelností pro všechny ostatní. Pokud ve vaší aplikaci rešíte některou z těch prvně uvedených, může se vám tato funkcionalita hodit.
- No a do třetice všeho dobrého, tento trik se vám může hodit v budoucnu, až Microsoft uvede jistou technologii, s jejímž preview jsme byli seznámeni na letošním MVP Summitu. Výše uvedený trik jsem se dozvěděl právě tam a je to bohužel to jediné, co z celé přednášky není pod NDA…