c# - La llamada es ambigua entre un solo método, es decir, un método de extensión.
asp.net runtime-error (6)
Tengo un método de extensión como
public static class Extension
{
public static string GetTLD(this string str)
{
var host = new System.Uri(str).Host;
int index = host.LastIndexOf(''.''), last = 3;
while (index >= last - 3)
{
last = index;
index = host.LastIndexOf(''.'', last - 1);
}
var domain = host.Substring(index + 1);
return domain;
}
}
Y estoy llamando a esto como
string domain = "." + _url.GetTLD();
No estoy recibiendo ningún error en la construcción y la construcción limpia.
Pero estoy recibiendo un compilation error
en el tiempo de ejecución diciendo:
La llamada es ambigua entre los siguientes métodos o propiedades: ''myIGNOU.Extension.GetTLD (cadena)'' y ''myIGNOU.Extension.GetTLD (cadena)''
Juro que no tengo este método de extensión colocado en ningún otro lugar también en el proyecto. ¿Por qué recibo este error solo en tiempo de ejecución ..?
Pero si elimino este método, obtengo un error en el momento de la creación, no en el tiempo de ejecución. Todo funciona bien sin el código de este método.
Esta no es una solución real y no puedo explicar cómo funcionó, pero funcionó.
Estaba probando todo en Project Properties, References, bin, obj pero nada me ayudó realmente. Y estaba probando todas las opciones y elegí "Convertir a aplicación web" en el menú contextual. Aunque antes era una aplicación web. Me mostró una advertencia que decía que los archivos .designer.cs
se agregarán a cada archivo aspx y simplemente hice clic en Aceptar.
Todo siguió igual, excepto que la carpeta App_Code
(donde estaban todas estas clases) fue renombrada a Old App_Code
y construí el proyecto. Y ahora no estoy recibiendo el error de compilación en tiempo de ejecución.
Sé que la carpeta App_Code está diseñada para el Proyecto del sitio web y no tuve ningún problema con esto hasta este momento en WAP. Pero me acabo de dar cuenta de que no debería tener la carpeta App_Code en WAP como se explica aquí en un foro de wrox (primer punto) . El autor ha dicho aquí que
App_Code no es compatible con un WAP. La carpeta App_Code se compila en tiempo de ejecución ; Todo el código en un WAP se compila en tiempo de compilación / desarrollo. Por lo tanto, cuando agrega una carpeta App_Code a un WAP. usted termina con el código duplicado; por ejemplo, una clase definida en App_Code también aparecerá en el wap DLL. La solución es fácil: solo nombre la carpeta con otra cosa como Clases o CodeFiles.
He intentado cambiar el nombre también antes de la conversión, pero esa vez no funcionó.
He encontrado esta solución en los comentarios anteriores. Y me ayudó.
Tengo la referencia al proyecto A en el proyecto A. Por error.
Eliminar ayuda =)
Mi problema era similar a lo que Shashwat describe. En mi caso, puse el archivo de código en el directorio App_Code, pero para obtener inteligencia, configuré el archivo para compilar, lo que probablemente signifique que el archivo se compiló tanto en tiempo de ejecución como en tiempo de compilación. Acabo de mover el archivo de App_Code.
Tuve el mismo problema pero para mí resolvió el problema para eliminar el proyecto propio de las referencias del proyecto. Resharper agregó accidentalmente una referencia al binario compilado del mismo proyecto. De esa manera tuve la misma clase de extensión 2 veces dentro de mi proyecto. Durante la construcción, no pudo distinguir entre la versión de origen o la versión binaria de la clase de extensión.
Básicamente, verifique las referencias de su proyecto si contiene una referencia a sí mismo.
La respuesta proporcionada por @shashwat también es un caso.
Tuve la misma situación. Tenía un control de cuadrícula personalizado para el que había un método de extensión. El método fue declarado en un solo lugar. El control había estado en uso en múltiples lugares a lo largo de mi solución sin problemas. Entonces, un día, copié un control que implementó el control de cuadrícula personalizado al copiar y pegar literalmente dentro del mismo proyecto. Entonces acabo de renombrar las propiedades según corresponda. Después de eso, la solución no generaría el mismo error que el anterior. Sospecho que la copia y el pegado añadidos al proyecto son una referencia a sí mismo.
Borrarlo resolvió el problema.
Yo tuve el mismo problema. Después de algunas investigaciones y experimentos, descubrí que (por cualquier razón) a Visual Studio no le gustan los métodos de extensión en la carpeta App_Code. La solución más fácil que encontré fue simplemente cambiar el nombre de la carpeta.