2

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

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

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

有没有办法解决?

[更新]

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

4

4 回答 4

6

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

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

于 2012-09-18T15:36:01.967 回答
3

与网站相比, ASP.NET MVC 使用Web 应用程序项目。需要编译一个 Web 应用程序项目。该App_Code目录在此类应用程序类型中毫无意义。

于 2010-03-16T18:58:57.393 回答
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 项目,我最终不得不使用构建后事件来检查所有内容——我不喜欢这样。

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

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

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

于 2010-03-23T21:19:17.993 回答
0

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

于 2012-04-19T16:11:07.550 回答