App_Code klasörü ve aynı uygulamada birden fazla dille çalışma

App_code klasörü Asp.net in bir uygulama klasörü olup, class dosyalarının ,.wsdl dosyalarının vb. depolandığı bir klasördür. App_code klasörünüze sağ tıklayıp > addnewitem derseniz, bu klasöre ekleyebileceğiniz dosya tiplerini görebilirsiniz.

Bu klasörde yer alan öğeler otomatik olarak uygulamadaki tüm sayfalardan kullanılabilir haldedir. Asp.net bu klasördeki dosyaları otomatik olarak derler ve tüm sayfalardan ulaşılabilir yapar.

Bizim inceleyeğimiz olay ise App_code klasörü içinde "CSHello.cs" ve "VBHello.vb" iki farklı dilden class oluşturup,bunları aynı uygulama içerisinden kullanabilmektir. App_Code klasörü içindeki tüm classlar tek assembly kullanarak derlendiği için , aşağıdaki görüntüdeki gibi bir durumda(farklı diller kullanma durumu) uygulama hata verir.  

Hata : Error    The files '/App_Code/VBHello.vb' and '/App_Code/CSHello.cs' use a different language, which is not allowed since they need to be compiled together.

 

Ve aynı zamanda iki sayfa oluşturup biri c# dilinde "CS.aspx" ve diğeri vb dilinde"VB.aspx", busayfalardan bu classları çağırmak istediğimizde aynı hata devam edecektir ve class larımızı kullanamayacağız.

Çözümü ise WEB.CONFİG dosyasından APP_CODE klasöründe ayrı directory oluşturup, bunların ayrı assemblyler ile derlenmesini sağlamak olacaktır. Yani <sytem.web> taglarının altındaki compilation tagları aşağıdaki gibi düzenlenebilir ;

<compilation>
        <codeSubDirectories>
          <add directoryName="CS"/>
          <add directoryName="VB"/> 
        </codeSubDirectories>
</compilation>
       

Bundan sonra uygulamamızdaki classları aşağıdaki şekilde yönetmeliyiz.

Artık APP_CODE klasörümüzde hem Visual Basic hemde C# classlarını kullanabilir hale geldik. Oluştuduğumuz CS.aspx ve VB.aspx sayfalarından da aşağıdaki gibi classlarımızı kullanabiliriz.

[ CS.aspx ]

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="CS.aspx.cs" Inherits="AppCode_CS" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:Label ID="Label1" runat="server"></asp:Label>

        <script runat="server">

            protected void Page_Load(object sender, EventArgs e)
            {
                CSHello user = new CSHello();
                Label1.Text = user.HelloUser("hasan");

            }
        </script>
    </div>
    </form>
</body>
</html>

[ VB.aspx ]

<%@ Page Language="VB" AutoEventWireup="false" CodeFile="VB.aspx.vb" Inherits="AppCode_VB" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
     
        <asp:Label ID="Label1" runat="server"></asp:Label>

        <script runat="server">
            Protected Sub Page_Load(ByVal Sender As Object, ByVal e As EventArgs) Handles Me.Load
		
                Dim user As New VBHello
                Label1.Text = user.HelloUser("Hasan")

            End Sub
    </script>
        
    </form>
</body>
</html>
Yorumlar