【发布时间】:2011-06-24 09:23:03
【问题描述】:
我正在使用 Razor 视图为 ASP.NET MVC3 设计插件框架,但在让嵌入式视图正常工作时遇到问题。
插件框架旨在具有以下功能:
- 每个插件都有自己的模型、控制器和视图。视图是嵌入式资源,控制器派生自 PluginController 类
- 插件具有对定义 PluginController 基类的共享类库的依赖项引用
- 托管插件的“shell”Web 应用程序在设计时不得包含对任何插件的引用,因为它在设计时不知道它有哪些插件。
- 插件 dll 被放置在 shell 应用程序的文件夹中,该文件夹不是 /bin 文件夹
- shell 负责:
- 发现插件(使用反射)
- 注册所有控制器(为此我使用 Spring.Net)
- 为控制器创建路由
- 通过自定义 VirtualPathProvider 提供 razor 文件 (cshtml)
现在一切正常,除非嵌入式视图引用了插件 dll 中的类型。然后我得到了臭名昭著的错误(名字被忽略了):
The type or namespace name '[Plugins]' does not exist in the namespace '[MyPluginSolution]' (are you missing an assembly reference?)
原因是调用运行时编译剃须刀视图的 csc 编译器只能从 bin 文件夹和 GAC 获取 dll 引用。
我也尝试过使用this technique 预编译视图,但最后它给出了相同的结果,因为运行时坚持为预编译的剃刀视图编译一个包装器。
我当然可以将插件 dll 放到 /bin 文件夹中,但我的问题是:
有没有办法在非 bin(和非 GAC)文件夹中注册 dll,并将它们视为“一等公民”,以便剃刀视图可以使用它们?
【问题讨论】:
标签: asp.net-mvc-3 plugins razor