ASP.NET MVC 3和App_Code文件夹
ASP.NET MVC 3和App_Code文件夹
在ASP.NET Webform中,App_Code
是放置代码并在运行时使用的标准文件夹。但是我认为在ASP.NET MVC中,这个文件夹有所不同,我的问题是:
- 在ASP.NET MVC中,我应该把我的代码(扩展方法、辅助函数等)放在哪里?当我把代码存储在
App_Code
文件夹中时,我无法在controller
中使用它们,但在views
中可以正常工作。 - 关于Entity Framework,同样的问题,我应该把
edmx
和tt
文件放在哪里?我不使用Code-First。
更新:
经过一些搜索,最终我在我的解决方案中创建了一个新的类库项目,代码在所有controllers
和views
中都可以使用。我仍然不知道为什么App_Code
中的代码在控制器中不可用。
在ASP.NET MVC 3项目中,有一个问题是无法识别App_Code文件夹中的类Utility.cs。有人尝试将Utility.cs文件的Build Action从"Content"更改为"Compile",这样问题得到了解决。但是另一个人在他的项目中尝试这样做时,却遇到了"The call is ambiguous between the following methods or properties"的错误。
这个问题的出现原因是App_Code的目的被打破了。App_Code文件夹的存在是为了能够在运行时动态编译代码文件,而不是将它们作为项目的一部分。因此,即便没有将它们设置为Compile Build Action,也应该能够将代码文件放在App_Code文件夹中。
解决这个问题的方法是确保将代码文件放在App_Code文件夹中,并且不要改变它们的Build Action。这样就能够正常识别App_Code文件夹中的类。
在ASP.NET MVC 3中,App_Code文件夹不再是必需的,因为它有一个特殊的意义,即“不要向Web浏览器提供这些文件”。在大多数情况下,ASP.NET MVC不会直接向浏览器提供文件,因此不再需要App_Code文件夹。在ASP.NET MVC中,可以将代码文件放在任何文件夹中,因为这些文件将被编译成一个DLL文件,通常不会发布到网站本身。
另一个解决方法是使用独立的库。如果有一些代码文件不包含在DLL文件中,仍然存在于Web应用程序中,那么可以将这些文件放在任何地方。是否有一些标准的位置,Web开发人员希望代码放在哪里?比如App_Code文件夹?Helpers文件夹?从微软的一些示例中可以看到,有一些文件夹如Helpers和Models。
为什么会有不包含在DLL文件中的代码?即使是在代码后台也会被编译成DLL文件。
我可以这样做。那么在Web应用程序中,除了Global.asax.cs文件之外,最佳做法是没有单个文件包含代码吗?
我真的不知道你在说什么...当然你可以在Web应用程序中有代码,它们只是被编译到应用程序的DLL文件中。它们不需要在App_Code文件夹中。
你没有解释App_Code文件夹为什么存在。它是一个特殊的地方,用于存放代码文件以进行动态编译(在运行时)。这是App_Code存在的首要原因。你可以将代码放在任何文件夹中,但是必须使用Compile动作来标记它进行编译,而在App_Code文件夹中,这是不必要的,实际上,大多数文件都不是项目的一部分。