C# 以下方法或属性之间的调用不明确(错误??) 创建新的ASP.NET MVC网站 应用 创建ASP.NET应用程序\u代码 文件夹

C# 以下方法或属性之间的调用不明确(错误??) 创建新的ASP.NET MVC网站 应用 创建ASP.NET应用程序\u代码 文件夹,c#,.net,asp.net-mvc,.net-3.5,C#,.net,Asp.net Mvc,.net 3.5,在新的 文件夹中,创建一个具有 扩展方法。例如: static public class BugMVCExtension { public static int ToInt(this string str) { return Convert.ToInt32(str); } } 选择一个视图并尝试使用此新的扩展方法 您将获得以下异常: CS0121: The call is ambiguous between the following methods

在新的 文件夹中,创建一个具有 扩展方法。例如:

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应用程序中创建应用程序代码是否错误?

    在Visual Studio中创建的MVC项目默认使用Web应用程序项目模型<代码>应用程序代码主要由网站模型使用。我建议阅读它们之间的差异(MSDN中也有详细介绍)。如果将源文件添加到Web应用程序项目中的
    App\u code
    ,Visual Studio会将其编译为DLL(因为它包含在项目中),并将其放入
    /bin
    。在运行时,ASP.NET编译器会看到
    App\u code
    ,并尝试在其他程序集中编译源代码。因此,两个具有相同名称的独立类将存在于两个不同的程序集中,当ASP.NET解析器尝试编译
    .aspx
    文件时,它将无法选择一个

    更新:
    这两个(扩展方法和您正在实例化的类)是否在一个.cs文件中?否则,您正在实例化的类可能位于源文件中,其生成操作(右键单击文件,单击属性)设置为内容,这会告诉Visual Studio在生成过程中跳过它(在这种情况下,您将无法在
    App\u code
    之外的其他.cs文件中引用它,但您可以在视图中使用它,因为它仅在运行时才生效。)如果生成操作是编译,您将得到一个错误。这个问题肯定不是特定于扩展方法的。Visual Studio似乎足够聪明,可以将添加到
    App\u code

    的源文件的默认内容设置为Content,我通过将其放置在文件夹完整命名空间的扩展文件中来解决

    命名空间帮助程序 {

    命名空间xxx.yyy.zzz.Helpers
    {

    我通过将.cs文件放在Web应用程序根目录的App_Code文件夹之外解决了这个问题。

    不要使用App_Code文件夹

    使用任何其他文件夹名称。例如appCode或ApplicationCode


    文件夹中的名称意味着在运行时进行某些编译,从而导致代码重复。

    但为什么只有在视图中尝试使用扩展方法时才会出现此问题?例如,如果我尝试在控制器中使用相同的EM,则运行时不会出现问题。因为控制器也是在生成时由VS编译器编译的。当时,该类只有一个实例。
    App_code
    是在运行时编译的。Mehrdad,我理解,但如果它发生在应该发生的情况下,我应该得到这个编译器的“偶数”我是否不使用扩展方法?做另一个测试,在App_代码中创建一个实例类,尝试在另一个视图中使用它…它将毫无问题地工作。我不明白为什么只有使用扩展方法才会出现这种情况。不,只有在使用扩展方法时才会得到它。如果你不这样做,将会有两种不同的方法幸福地生活在不同的程序集中。除非有人调用它,否则您永远无法选择一个。您能描述第二种情况吗(创建实例…我不懂)对不起,我的英语很差:)在我开始获取这个编译器异常之前,我使用了一些在app_代码中创建的类,没有任何问题,这是因为我认为这很奇怪,因为它只发生在extetion方法中。