Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc ASP.NET MVC使用App_代码目录_Asp.net Mvc_App Code - Fatal编程技术网

Asp.net mvc ASP.NET MVC使用App_代码目录

Asp.net mvc ASP.NET MVC使用App_代码目录,asp.net-mvc,app-code,Asp.net Mvc,App Code,我在ASP.NETMVC项目中添加了一个App_代码目录,以便动态编译插件 唯一的一点小麻烦是,在开发新插件时,我没有在App_代码目录中的类上获得intellisense 目前,我正在项目中的另一个目录中创建它们,然后将它们复制到App_代码中 这有什么办法吗 [更新] 我在下面贴了一个“答案”。从技术上来说,这回答了这个问题,因为根据我自己的规范,创建插件不需要使用工具(即intellisense)。然而,这确实引发了一个问题:如何在不使用App_代码的情况下实现一个动态编译的插件框架。由于

我在ASP.NETMVC项目中添加了一个App_代码目录,以便动态编译插件

唯一的一点小麻烦是,在开发新插件时,我没有在App_代码目录中的类上获得intellisense

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

这有什么办法吗

[更新]


我在下面贴了一个“答案”。从技术上来说,这回答了这个问题,因为根据我自己的规范,创建插件不需要使用工具(即intellisense)。然而,这确实引发了一个问题:如何在不使用App_代码的情况下实现一个动态编译的插件框架。由于这个问题与原来的问题大不相同,我将单独提出。

ASP.NET MVC使用。需要编译web应用程序项目。在这种应用程序类型中,
App\u code
目录毫无意义。

在设计时,我似乎不太可能从App\u代码中引用我的MVC web App程序集中的代码。我相信这正是VisualStudio中Web应用程序项目的本质,以及App_代码目录中的代码正在编译到不同程序集中的事实

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

因此,考虑到我的插件架构,我对定义插件()的概念很满意,我可以在特定目录中自动加载插件,如下所示:

            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();
var assemblies=newlist();
var di=new System.IO.DirectoryInfo(Server.MapPath(“~/Plugins”);
di.GetFiles(“*.dll”).ToList().ForEach(x=>{
Add(Assembly.LoadFrom(x.FullName));
});
列出外部插件=
Plugin.InitializePlugins(assemblies.ToList();
不使用/bin的唯一原因是性能。然而,由于插件项目引用了主web项目,我最终不得不使用后期构建事件来检查所有内容,这是我不喜欢的

所以一个更好的解决方案(正如许多人所建议的)是使用配置文件定义插件,并像往常一样将DLL放入bin

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


那么在这种情况下,使用App_代码真的很糟糕吗?它会回来咬我吗?…

有一个答案。至少对于MVC3。不要将解决方案作为解决方案打开。从本地IIS将其作为网站打开(假设您是这样运行的)。然后,您将看到intellisense显示您的动态应用程序代码。但您将无法浏览到外部的任何其他代码库。您将需要另一个studio实例并将其作为解决方案打开

您可以尝试将属性中的文件“Build Action”从“Compile”更改为“Content”。然后它们会像网站一样被编译。 下面的文章对此进行了解释:


@Darin,我理解项目类型之间的区别,但这是VS的事情,而不是运行时的事情。使用App_代码目录的原因是,我希望人们能够轻松添加插件,而不必在VS/VWDE中打开应用程序,添加插件并重新编译。它还提供了一个好处,即人们可以用自己喜欢的语言编写插件,无论是c#、vb.net还是ruby。使用App_代码是件坏事吗?这就是像BlogEngine这样的应用程序的工作原理,从可扩展性的角度来看,这非常棒。我添加了一个否决票,因为我在MVC web应用程序中使用了App_代码目录。我需要它的原因是在部署到IIS6时覆盖VirtualPathProvider。我找不到原始文档,但这篇文章包含了一些信息:就我而言,我不得不从“内容”改为“编译”