【问题标题】:ASP.NET MVC 3 and App_Code folderASP.NET MVC 3 和 App_Code 文件夹
【发布时间】:2012-05-16 14:41:20
【问题描述】:

在 ASP.NET Webform 中,App_Code 是放置代码并在运行时使用它的标准文件夹。但我认为这个文件夹在 ASP.NET MVC 中有点不同,我的问题是:

  • 在 ASP.NET MVC 中我应该把我的代码(扩展方法、助手、...)放在哪里。当我将代码存储在App_Code 文件夹中时,我无法在controller 中使用主题,但它们在views 中工作正常。

  • 关于实体框架,同样的问题,我应该把 edmxtt 文件放在哪里。 我没有使用代码优先

更新:

经过一番搜索,最后我在我的解决方案中创建了一个新的类库项目,代码在所有controllersviews 中都可用。 我还是不知道为什么App_Code中的代码在控制器中不可用

【问题讨论】:

  • 要在控制器中使用 app_code 类,请点击此处stackoverflow.com/questions/1222281/…
  • App_Code 类是在应用程序初始化期间编译的,因此在编译时它们不可用。
  • App_Code 文件夹将阻止您发布预编译的 MVC 项目(以防止首页点击等待)并会抛出错误 "The directory '/<projectName>/App_Code/' is not allowed because the application is precompiled"

标签: asp.net-mvc-3 entity-framework-4


【解决方案1】:

我遇到了同样的问题,我的类 Utility.cs 在我的 MVC 项目中未被识别。我将构建操作“内容”更改为“编译”,这解决了我的问题。 希望对您有所帮助。

【讨论】:

  • 如果我在我的项目中这样做,我会得到:“以下方法或属性之间的调用不明确”
  • 这违背了 App_Code 的目的。 App_Code 的存在是为了让您能够将代码文件放入其中并在运行时动态编译它们。甚至没有让他们成为项目的一部分,而是单独对他们设置编译构建操作。
【解决方案2】:

App_Code 在网站项目中是必需的,因为它具有特殊的含义。这意味着“不要将这些文件提供给网络浏览器”。在 ASP.NET MVC 中,大多数情况下文件并不直接提供给浏览器,因此不需要 App_Code。您可以将代码文件放在任何您想要的文件夹中,因为这些文件被编译成 DLL,通常不会发布到网站本身。

使用独立库也是一个不错的解决方案。

【讨论】:

  • 我也有同样的问题。我应该将未包含在 DLL 中的代码放在哪里? Web 应用程序中仍有一些代码。好的,假设我可以将代码文件放在任何我想要的地方。 Web开发人员期望代码存在的标准位置是否存在? App_Code 文件夹?助手文件夹?我注意到在 MS 的一些示例中,有 Helpers 和 Models 之类的文件夹。
  • @qub1n - 为什么会有不在 DLL 中的代码?甚至代码隐藏中的代码也被编译成 DLL
  • 我可以。那么,除了 Global.asax.cs 之外,Web 应用程序中真的没有包含代码的单个文件的最佳做法是什么?
  • @qub1n - 我真的不知道你在说什么......当然你可以在你的 web 应用程序中有代码,它们只是被编译到应用程序 DLL 中。它们不需要在 App_Code 中。
  • @ErikFunkenbusch 您并没有真正解释为什么 App_Code 首先存在。这是您放置代码文件以获取动态编译的地方(在运行时)。这就是 App_Code 的第一大原因,也是它特别的原因。您可以将代码放在您想要的任何文件夹中,但您必须在 App_Code 中使用 Compile 操作对其进行编译,这不是必需的,事实上,App_Code 中的大多数文件甚至都不是项目的一部分。
【解决方案3】:

没有人真正解释为什么 App_Code 首先存在。这是您放置代码文件以获取动态编译的地方(在运行时)。这就是 App_Code 的第一大原因,也是它特别的原因。您可以将代码放在您想要的任何文件夹中,但您必须在 App_Code 中使用 Compile 操作对其进行编译,这不是必需的,事实上,App_Code 中的大多数文件甚至都不是项目的一部分。

它也适用于 ASP.NET MVC 项目,您只需使用 .cshtml 扩展名命名您的代码文件。

【讨论】:

  • 请解释一下“Startup.cs”是如何在 App_Code 中正常工作的?
【解决方案4】:

我建议从this tutorial 开始。它首先使用 EF 代码,但如果您愿意,您可以简单地将代码首先 DbContext 替换为普通的 edmx ObjectContext(提示:模型文件夹)。

App_Code 特定于网站项目。 IMO,除了最简单的网站之外,它是一种组织所有网站的糟糕方式。 MVC 项目是一个Web 应用程序项目,因此没有App_Code,您的类几乎可以在任何地方定义。

【讨论】:

    【解决方案5】:

    好吧,尝试下载一些已经存在的开源项目。其中一个相当复杂,但如果你能理解它就非常酷 - orchard

    最佳做法是将此逻辑移至 DAL(数据访问层)或 BLL(业务逻辑层)。取决于您的应用程序的复杂性。

    【讨论】:

      【解决方案6】:

      对于那些不想要第二个项目/类库而只想为几个 c# 类创建一个简单文件夹的人,我建议使用“App_Classes”。

      【讨论】:

      • 请告诉我更多。如果您写了对App_Classes 的介绍以及如何使用它的说明,这将是一个很好的答案。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-06-19
      • 2013-05-17
      • 1970-01-01
      • 2011-11-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多