Použití více jazyků současně v App_Code

Vícejazyčný projekt 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í:

  1. 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.
  2. 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.
  3. 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…
  • Altairis
  • Nemesis
  • Microsoft MVP
  • IIS
  • ASP.NET