新的内部 文件夹,用一个创建一个类 扩展方法。例如:
static public class BugMVCExtension
{
public static int ToInt(this string str)
{
return Convert.ToInt32(str);
}
}
选择一个视图并尝试使用此新的扩展方法
你会得到这个例外:
CS0121: The call is ambiguous between the following methods or properties:
'*MvcApplication1.App_code.BugMVCExtentions.ToInt(string)*' and
'*MvcApplication1.App_code.BugMVCExtentions.ToInt(string)*'
这里的任何人都有更多相关信息吗? 在ASP.NET MVC(?)Web应用程序中创建App_code是错误的吗?
答案 0 :(得分:46)
在Visual Studio中创建的MVC项目默认使用Web应用程序项目模型。 App_Code
主要由网站模型使用。我建议阅读它们之间的差异(another question covers this,它也在MSDN上广泛讨论)。如果在Web应用程序项目中将源文件添加到App_Code
,Visual Studio会将其编译为DLL(因为它包含在项目中)并将其放入/bin
。在运行时,ASP.NET编译器会看到App_Code
并尝试在不同的程序集中编译源代码。因此,两个不同的程序集中将存在两个具有相同名称的单独类,当ASP.NET解析器尝试编译.aspx
文件时,它将无法选择一个。
这两个(扩展方法和您要实例化的类)是否在一个.cs文件中?否则,您实例化的类可能位于源文件中,构建操作(右键单击文件,单击属性)设置为内容,告诉Visual Studio跳过它在构建过程中(在这种情况下,您将无法在App_Code
之外的其他.cs文件中引用它,但您将能够在视图中使用它,因为它只会来在运行时生活。)如果构建操作是编译,您将收到错误。问题绝对不是扩展方法所特有的。对于添加到App_Code
的源文件,Visual Studio似乎足够聪明,可以将其设置为Content。
答案 1 :(得分:2)
我通过将.cs文件放在Web应用程序的根目录中的App_Code文件夹之外来解决了这个问题。
答案 2 :(得分:2)
请勿使用app_code文件夹。
使用任何其他文件夹名称。 IE浏览器。 appCode或ApplicationsCode。
文件夹中的名称意味着在运行时进行一些编译,导致代码重复。
答案 3 :(得分:1)
我通过放置文件夹的完整命名空间的扩展名文件来解决。
命名空间助手 {
命名空间xxx.yyy.zzz.Helpers {