我的一位朋友正在用PHP构建内容管理系统。
PHP是一种脚本语言,其中代码在运行时进行评估,因此在运行时添加代码非常简单(想想:论坛,联系表单等)
在ASP.NET(已编译)中执行相同操作..并非如此简单。
你们有没有想过如何动态加载代码并在实时Web应用程序中使用它?
答案 0 :(得分:2)
我认为您可以使用App Code文件夹。我听说过一个解决方案,开发人员不允许上传dll,因此他们使用了及时编译的应用程序代码文件夹。所以你可以为它添加类,它们将按需编译。
答案 1 :(得分:1)
您需要做的是制作基于插件的结构
基于插件的编程不是我可以在这里给出的答案,但是你创建了一个接口,你想要用作模块(插件)的程序集必须实现。 然后在运行时将所有dll加载到插件文件夹中并使用C#反射,更具体地说是Activator类。
祝你好运,这与Windows编程原理相同。
答案 2 :(得分:1)
如果您使用的是Visual Studio 2008,则默认的Web站点模型不会使用已编译的dll,而只是编译代码隐藏,我相信。您还可以使用提到的App Code文件夹。检查出所提到的BlogEngine.NET可能是一个非常好的起点,并且它们有一个很好的扩展架构,可以即时编译。
您也可以没有代码隐藏文件,并将代码放在<script language="C#" runat="server"></script>
中,我相信Visual Studio Express版本默认执行此操作。
答案 3 :(得分: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"/>
但由于它是强类型语言,因此您的代码必须引用类型或接口。你不能带来它不知道如何处理的代码。除非你想整天反思编码。
答案 4 :(得分:0)
开源BlogEngine.NET中包含一些代码,允许开发人员编写您可能觉得有用的扩展。通过Global.asax在应用程序启动时加载扩展。
答案 5 :(得分:0)
试试这些文章:
Implementing a Plug-In Architecture in C#
C# 2.0: Loading plugins at run-time using late binding
答案 6 :(得分:0)
我回答了自己的问题here。