asp.net-mvc-3 – 具有ASP.NET MVC3和嵌入式Razor视图的插件框架
我正在使用Razor视图为ASP.NET MVC3设计一个插件框架,并且让嵌入式视图正常工作时出现问题.
插件框架设计具有以下功能: >每个插件都有自己的模型,控制器和视图.视图是嵌入式资源,控件派生自PluginController类 发现插件(使用反射) 现在一切正常,除非嵌入视图引用了插件dll中的类型.然后我得到臭名昭着的错误(遗漏的名字): 命名空间'[MyPluginSolution]’中不存在类型或命名空间名称[插件])(您是否缺少程序集引用?) 这样做的原因是调用运行时编译剃刀视图的csc编译器只能从bin文件夹和GAC获取dll引用. 我也尝试使用this technique预编译视图,但最终给出了相同的结果,因为运行时坚持编译预编译的剃刀视图的包装器. 我当然可以把插件dll放在/ bin文件夹中,但我的问题是: 有没有办法在非bin(和非GAC)文件夹中注册dll,并将其视为“一级公民”,以便它们可以被剃刀视图使用? 解决方法
好的,解决方案是使用
this article发现的.
首先我用PreApplicationStartMethod创建一个类.此方法扫描插件文件夹,并将dll复制到AppDomain.DynamicDirectory. 然后使用BuildManager.AddReferencedAssembly加载这些dll的每个. 而且,强大的剃刀视图编译精美.请看代码: [assembly: PreApplicationStartMethod(typeof(MySolution.PluginHandler.PluginActivator),"Initialize")] namespace MySolution.PluginHandler { public class PluginActivator { private static readonly DirectoryInfo PluginFolderInfo; static PluginActivator() { PluginFolderInfo = new DirectoryInfo(HostingEnvironment.MapPath("~/plugins")); } public static void Initialize() { CopyPluginDlls(PluginFolderInfo,AppDomain.CurrentDomain.DynamicDirectory); LoadPluginAssemblies(AppDomain.CurrentDomain.DynamicDirectory); } private static void CopyPluginDlls(DirectoryInfo sourceFolder,string destinationFolder) { foreach (var plug in sourceFolder.GetFiles("*.dll",SearchOption.AllDirectories)) { if (!File.Exists(Path.Combine(destinationFolder,plug.Name))) { File.Copy(plug.FullName,Path.Combine(destinationFolder,plug.Name),false); } } } private static void LoadPluginAssemblies(string dynamicDirectory) { foreach (var plug in Directory.GetFiles(dynamicDirectory,"*.dll",SearchOption.AllDirectories)) { Assembly assembly = Assembly.Load(AssemblyName.GetAssemblyName(plug)); BuildManager.AddReferencedAssembly(assembly); } } } } 我希望这可以帮助其他想要使用这些新技术创建一个干净的插件框架的程序员. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net – 内容控件必须是顶级控件
- asp.net-core – 当返回null而不是控制器中设置的值时,Mode
- asp.net-mvc-3 – 使用JSON.Net序列化EF4.1实体
- asp.net Gridview,1记录跨度两行
- asp.net-mvc – 使用Web Api验证.NET MVC应用程序
- asp.net-mvc – DotNetOpenAuth:消息签名不正确
- asp.net – 在global.asax中设置的用户仅在下次请求后才可用
- asp.net-mvc – 保持viewdata在RedirectToAction
- ASP.NET httpHandlers和处理程序
- asp.net – 用户控件(ascx)和属性
- ASP.NET Web API为单个路由定制IHttpControllerS
- asp.net – jQuery无法在我的主机上运行?
- Asp.Net MVC EnableClientValidation不起作用
- asp.net – “发布失败”,但建立成功?
- asp.net-mvc – 如何在ASP.net MVC 4 RouteConfi
- asp.net-mvc-3 – 使用Ninject 2.2的MVC 3依赖注
- 使用ASP.NET流视频
- asp.net – MVC 4 Web API Action返回:类型vs H
- 互联网级监控平台之内存存储的设计和优化
- asp.net – ASP .Net Textbox Textchanged事件