ASP.NET MVC使用App_Code目录

时间:2010-03-16 16:01:21

标签: asp.net-mvc app-code

我已经在我的ASP.NET MVC项目中添加了一个App_Code目录,以便我获得插件的动态编译。

只有轻微的烦恼是,在开发新插件时,我没有在App_Code目录中的类上获得智能感知。

目前我在项目中的另一个目录中创建它们,然后将它们复制到App_Code中。

有什么方法吗?

[更新]

我在下面发布了一个“答案”。从技术上讲,这基于我自己的规范来回答问题,不需要使用工具(即智能感知)来创建插件。但是,这确实提出了一个问题,即如何在不使用App_Code的情况下实现动态编译的插件框架。由于这个问题与原版有很大的不同,我会单独提出。

4 个答案:

答案 0 :(得分:6)

您可以尝试将属性中的“Build Action”文件从“Compile”更改为“Content”。然后他们将被编译为WebSite。 下面的文章解释了它:

http://vishaljoshi.blogspot.co.uk/2009/07/appcode-folder-doesnt-work-with-web.html

答案 1 :(得分:3)

ASP.NET MVC使用web application project in contrast to a web site。需要编译Web应用程序项目。 App_Code目录在这种应用程序类型中没有任何意义。

答案 2 :(得分:0)

我似乎不太可能在设计时从App_Code引用我的MVC Web应用程序程序集中的代码。我相信这只是Visual Studio中Web应用程序项目的本质,以及App_Code目录中的代码被编译到不同的程序集中这一事实。

在我最初的问题中,我解释说我想要使用App_Code,因为它具有动态编译功能。考虑到我的可扩展性要求,intellisense不起作用属性这一事实不应该成为一个问题,因为整个问题是IDE开发插件需要 - 如果我要打开Visual Studio开发它们我也可以使用类库。

考虑到我的插件架构,我对定义我的插件(http://weblogs.asp.net/justin_rogers/articles/61042.aspx)的概念很好,我可以在特定目录中自动加载插件,如下所示:

            var assemblies = new List<Assembly>();
        var di = new System.IO.DirectoryInfo(Server.MapPath("~/Plugins"));

        di.GetFiles("*.dll").ToList().ForEach(x => {
            assemblies.Add(Assembly.LoadFrom(x.FullName));
        });

        List<Plugin> ExternalPlugins =
            Plugin.InitializePlugins(assemblies).ToList();

不使用/ bin的唯一原因是性能。但是,由于插件项目引用了主Web项目,我最终不得不使用post build事件来控制所有内容 - 我不喜欢这样做。

因此,更好的解决方案(如许多人所建议的)是使用配置文件来定义插件并将dll正常放入bin中。

但是,通过所有这些不同的方法,我正在绕过最初的要求 - 能够在不使用IDE的情况下动态调整插件,而无需手动编译应用程序。

所以在这种情况下,使用App_Code确实如此糟糕,它会回来咬我吗?...

答案 3 :(得分:0)

有一个答案。对于MVC3至少。不要将解决方案作为解决方案打开。从本地IIS打开它作为一个网站(假设你运行它的方式)。然后,您将看到显示智能感知的动态app_code代码。但是您将无法浏览到外部的任何其他代码库。你需要另一个工作室实例并打开它作为解决方案来做到这一点。