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方法中。