我的一位朋友正在用PHP構建一個內容管理系統。C#,ASP.NET 3.5 - 運行時加載代碼
PHP是一種腳本語言,其中的代碼在運行時進行計算的,因此它是相當簡單的添加代碼..在運行時(認爲:一個論壇,聯絡表格等)
在ASP.NET(這是編譯)做同樣的事情..不是那麼簡單。
你們有沒有想過如何動態加載代碼並在實際的Web應用程序中使用它?
我的一位朋友正在用PHP構建一個內容管理系統。C#,ASP.NET 3.5 - 運行時加載代碼
PHP是一種腳本語言,其中的代碼在運行時進行計算的,因此它是相當簡單的添加代碼..在運行時(認爲:一個論壇,聯絡表格等)
在ASP.NET(這是編譯)做同樣的事情..不是那麼簡單。
你們有沒有想過如何動態加載代碼並在實際的Web應用程序中使用它?
我回答了我自己的問題here。
我認爲你可以使用這個App Code文件夾。我聽說過一種解決方案,開發人員不允許上傳dll,因此他們使用了及時編譯的應用程序代碼文件夾。所以你可以添加類,它們會按需編譯。
開源BlogEngine.NET中有一些代碼,允許開發人員編寫擴展,你可能會發現有用。擴展通過Global.asax在應用程序啓動時加載。
,你所要做的就是讓一個基於插件結構
基於插件的編程是不是我可以在一個答案就在這裏給你解釋,但你創建你想爲使用該組件一個接口模塊(插件)必須實現。 然後,您將在運行時將所有dll加載到插件文件夾中,並使用C#反射,更具體地說是Activator類。
祝您好運,這與Windows編程的原理相同。
如果您使用的是Visual Studio 2008,默認網站模型不使用編譯的dll,只是編譯後臺代碼,我相信。您也可以使用前面提到的App Code文件夾。檢出BlogEngine.NET如上所述可能是一個很好的起點,並且它們有一個很好的擴展體系結構,可以隨時編譯。
您也可以不使用代碼隱藏文件,並將代碼放置在<script language="C#" runat="server"></script>
中,我相信Visual Studio Express版本默認會執行此操作。
是的,「File | New ... | Web Site」模型會給你一個「即時編譯」的應用程序。 如果您選擇「File | New ... | Project | Web | Web Application」,那麼您將擁有「部署前編譯」Web應用程序。 真的有優點和缺點。 – 2009-04-24 08:18:16
我一直都在配置提供程序。
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"/>
但由於它是一個強類型語言,你的代碼必須具有的類型或接口引用。你不能引入不知道如何處理的代碼。除非你希望整天用反射來編碼。
完成什麼? – 2009-04-23 10:45:30
@Ian Quigley:更新了我的問題。 – roosteronacid 2009-04-23 10:50:58
如果您想要更好的答案,那麼知道您是否要包含.dll(已編譯的代碼)或源文件會非常有幫助?因爲你想得到兩套相互矛盾的答案。 – 2009-04-27 01:27:53