0

这似乎是唯一有效的方法:

  • 如果 .cs 文件在 App_Code 内...
    • 并且不包含扩展方法:将构建操作设置为“编译”;否则项目中没有其他源代码知道它的存在。
    • 并包含扩展方法:将构建操作设置为“无”;否则你会得到一个错误,即在和之间的引用x.Foo不明确。MyExtensions.FooMyExtensions.Foo
  • 如果 .cs 文件位于 App_Code 之外,位于名为 Helpers 的文件夹中,则无论它是否包含扩展方法,它都必须将构建操作设置为“编译”。

我不明白这种行为。我不确定 ASP.NET MVC 是否包含 App_Code 的任何特殊权限,但它看起来确实如此......但只是在它自动编译包含 .cs 文件的扩展方法的意义上,即使构建操作是设置为“无”??有人请解释一下。

4

1 回答 1

0

我假设您已经创建了一个 Web 应用程序项目,而不是一个网站项目。ASP.NET 应用程序中的 App_Code 文件夹是特殊的。它旨在允许您插入代码以将其与网站一起编译。因此,项目项被标记为“无”以确保它们不是由 Visual Studio 编译的。当您将网站项目发布到托管环境时,代码文件本身会复制到 App_Code 文件夹中,并由 ASP.NET 运行时编译成单独的程序集。

现在,当您创建 MVC Web 应用程序时,您必须记住它与网站项目的项目类型不同。MVC Web 应用程序将在本地编译为 /bin 目录中的程序集。如果您将 App_Code 文件夹添加到包含您的代码的项目并将构建类型更改为编译,您会遇到问题,因为:

  1. 您的 MVC 应用程序已编译并包含 MyExtensions.Foo 类型,并且,
  2. ASP.NET 正在编译也具有 MyExtensions.Foo 类型的 App_Code 文件夹。

我的建议是避免使用 App_Code。我倾向于不这样做,因为我喜欢更简洁的项目结构。使用 Models 文件夹存储代码,或创建其他文件夹......

如果您真的想使用 App_Code 文件夹,最好将任何文件的构建操作标记为“内容”,以确保在发布站点时将它们复制到输出目录。

于 2010-07-04T17:55:40.520 回答