2009-04-23 125 views
2

我的一位朋友正在用PHP構建一個內容管理系統。C#,ASP.NET 3.5 - 運行時加載代碼

PHP是一種腳本語言,其中的代碼在運行時進行計算的,因此它是相當簡單的添加代碼..在運行時(認爲:一個論壇,聯絡表格等)

在ASP.NET(這是編譯)做同樣的事情..不是那麼簡單。

你們有沒有想過如何動態加載代碼並在實際的Web應用程序中使用它?

+0

完成什麼? – 2009-04-23 10:45:30

+0

@Ian Quigley:更新了我的問題。 – roosteronacid 2009-04-23 10:50:58

+0

如果您想要更好的答案,那麼知道您是否要包含.dll(已編譯的代碼)或源文件會非常有幫助?因爲你想得到兩套相互矛盾的答案。 – 2009-04-27 01:27:53

回答

2

我認爲你可以使用這個App Code文件夾。我聽說過一種解決方案,開發人員不允許上傳dll,因此他們使用了及時編譯的應用程序代碼文件夾。所以你可以添加類,它們會按需編譯。

See here

0

開源BlogEngine.NET中有一些代碼,允許開發人員編寫擴展,你可能會發現有用。擴展通過Global.asax在應用程序啓動時加載。

1

,你所要做的就是讓一個基於插件結構

基於插件的編程是不是我可以在一個答案就在這裏給你解釋,但你創建你想爲使用該組件一個接口模塊(插件)必須實現。 然後,您將在運行時將所有dll加載到插件文件夾中,並使用C#反射,更具體地說是Activator類。

祝您好運,這與Windows編程的原理相同。

1

如果您使用的是Visual Studio 2008,默認網站模型不使用編譯的dll,只是編譯後臺代碼,我相信。您也可以使用前面提到的App Code文件夾。檢出BlogEngine.NET如上所述可能是一個很好的起點,並且它們有一個很好的擴展體系結構,可以隨時編譯。

您也可以不使用代碼隱藏文件,並將代碼放置在<script language="C#" runat="server"></script>中,我相信Visual Studio Express版本默認會執行此操作。

+0

是的,「File | New ... | Web Site」模型會給你一個「即時編譯」的應用程序。 如果您選擇「File | New ... | Project | Web | Web Application」,那麼您將擁有「部署前編譯」Web應用程序。 真的有優點和缺點。 – 2009-04-24 08:18:16

1

我一直都在配置提供程序。

try 
{ 
    string assembly = ConfigurationSettings.AppSettings["DataProvider"].Split(',')[0]; 
    string classname = ConfigurationSettings.AppSettings["DataProvider"].Split(',')[1]; 
    m_Instance = (SqlDataProvider)Activator.CreateInstance(assembly,classname).Unwrap(); 
} 
catch(Exception ex) 
{ 
    Common.Error.Write("Getting Data Provider From Config"); 
} 

的配置設置是這樣的:

<add key="DataProvider" value="MyDll,MyDll.Data.SqlDataProvider"/> 

但由於它是一個強類型語言,你的代碼必須具有的類型或接口引用。你不能引入不知道如何處理的代碼。除非你希望整天用反射來編碼。