将View文件作为资源嵌入Binary中

时间:2009-03-21 10:30:09

标签: asp.net-mvc

我正在尝试使用少量控制器创建一个.Net库,我想在多个Web项目中重用它们。

我已经走了一半,但问题是,每当我将库添加到新的Web项目时,我需要将所有相应的视图文件分别复制到新项目中。每当我更新库时,我都需要重复这些步骤。

有什么办法,我可以将dll中的View文件作为资源嵌入,并将其作为嵌入式资源传递给“View()”函数。

我想要实现的是,我想将控制器和相应的视图放在单个dll文件中,这样我就可以轻松地将库作为单个dll文件分发/管理

(Oneway我已经发现,正在使用IView接口创建自定义视图类并通过写入HTML Output Writer直接渲染输出,但我更喜欢使用View文件。)

5 个答案:

答案 0 :(得分:7)

菲尔哈克几天前发布的blog post可能对你有所帮助;他正在使用数据库存储视图和ruby来处理它们,但我认为你可以使用他的原型并使其适用于存储在单独组件中的视图。

快速浏览一下代码,我认为魔术酱将实现VirtualPathProviderViewEngine(例如参见“RubyViewEngine”类)并将ViewEngine插入ViewEngines.Engines Collection(参见Global.asax.cs)。

答案 1 :(得分:2)

您可以使用VirtualPathProvider进行此操作。

答案 2 :(得分:0)

WebFormView类型最终调用BuildManager.CreateInstanceFromVirtualPath。 BuildManager中没有重载或其他函数来从流而不是从虚拟路径获取输入。因此,如果您不想自己实现IView,则需要将文件实际解压缩到磁盘,以便它们可以由BuildManager编译。您仍然可以将DLL作为单个文件分发,但需要生成aspx文件,以便BuildManager编译它们。有关详细信息,请参阅BuildManager help

答案 3 :(得分:0)

使用CodePlex上的VB.NET XML Literals项目查看ASP.NET MVC视图引擎http://vbmvc.codeplex.com

这是一个自定义视图引擎,最初由Dmitry Robsman构思,他是Microsoft的ASP.NET PUM。每个视图都是一个VB.NET类,命名空间(而不是文件路径)用于将视图连接到控制器。将ASPX视图文件的内容复制到这些VB类中的XML文字中是相当简单的。作为类,它们被编译到程序集中而不需要任何额外的努力。

如果您的控制器是C#,那么很可能您最终会得到2个DLL,但Scott Hanselman有一篇关于让C#和VB在同一个程序集中共存的博客文章。 http://www.hanselman.com/blog/MixingLanguagesInASingleAssemblyInVisualStudioSeamlesslyWithILMergeAndMSBuild.aspx

答案 4 :(得分:0)

请一想到codeplex并查看Managed Extensibility Framework

一旦你完成了......

查看Maarten BalliauwASP.NET MVC and the Managed Extensibility Framework (MEF)

的评论