【问题标题】:ASP.NET MVC using App_Code directoryASP.NET MVC 使用 App_Code 目录
【发布时间】:2010-03-16 16:01:21
【问题描述】:

我已将 App_Code 目录添加到我的 ASP.NET MVC 项目中,以便我获得插件的动态编译。

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

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

有没有办法解决这个问题?

[更新]

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

【问题讨论】:

    标签: asp.net-mvc app-code


    【解决方案1】:

    您可以尝试将“属性”中的“构建操作”文件从“编译”更改为“内容”。然后它们将像网站一样被编译。 下面的文章对此进行了解释:

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

    【讨论】:

    • 就我而言,我必须从“内容”更改为“编译”
    【解决方案2】:

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

    【讨论】:

    • @Darin,我了解项目类型之间的区别,但是,这是 VS 的事情,而不是运行时的事情。使用 App_Code 目录的原因是我希望人们能够轻松地添加插件,而不必在 VS/VWDE 中打开应用程序,添加插件并重新编译。它还提供了人们可以用他们喜欢的语言编写插件的好处,无论是 c#、vb.net 还是 ruby​​。使用 App_Code 是一件坏事吗?这就是 BlogEngine 之类的应用程序的工作方式,从可扩展性的角度来看它非常棒。
    • 我投了反对票,因为我在 MVC Web 应用程序中使用了 App_Code 目录。我需要它的原因是在部署到 IIS6 时覆盖 VirtualPathProvider。我找不到原始文档,但这篇文章包含一些信息:sunali.com/2008/01/09/…
    【解决方案3】:

    我似乎不太可能在设计时从 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 项目,我最终不得不使用构建后事件来检查所有内容 - 我不喜欢。

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

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

    那么在这种情况下,使用 App_Code 真的那么糟糕,它会回来咬我吗?...

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-14
        • 1970-01-01
        相关资源
        最近更新 更多