No soy un desarrollador particularmente hábil en el mundo de Windows, y tengo un problema que requiere algunas explicaciones. Espero que en mi ignorancia, me esté perdiendo algo obvio.Error de compilación de .NET Visual Studio "existe otra declaración parcial de este tipo"
Me encontré teniendo que invertir la compilación de un sitio web/aplicación precompilado de .NET. Reflexión me consiguió de C# de CodeFile que necesitaba, y yo pasamos una buena cantidad de tiempo cambiando todas las referencias .aspx de cosas como esta:
<%@ page language="C#" autoeventwireup="true" inherits="someclassname, App_Web_Z8sdf" %>
a cosas como esta:
<%@ page language="C#" autoeventwireup="true" CodeFile="somefilename.aspx.cs" inherits="someclassname" %>
y moviendo los archivos aspx.cs al mismo directorio que los archivos .aspx.
Esto me llevó al punto en el que podía cargar el proyecto de una manera editable en Visual Studio. Lo he intentado con 2010 y 2008.
Ahora, sin embargo, estoy intentando construir este proyecto. El error que recibo es:
"Missing partial modifier on declaration of type 'someclassname'; another partial declaration of this type exists"
Lo suficientemente bueno. Entiendo que las clases pueden declararse en varios lugares y que cada una debe tener la palabra clave "parcial" para que funcione. Así que añadir la palabra clave parcial a la definición de clase en los aspx.cs archivo que el error está ocurriendo. Eso logró deshacerse de ese mensaje de error, y reemplazarlo con
"The type 'someclassname' already contains a definition for 'some variable name".
Se comporta claramente como si hubiera otra definición de clase en alguna parte. Siendo principalmente un administrador de Unix, comienzo a buscar en todos los archivos del proyecto las cadenas que coincidan con el nombre de la clase en cuestión, y lo encuentro precisamente en dos archivos y dos archivos. El archivo aspx que contiene las primeras líneas que cité, y el archivo aspx.cs que le corresponde que contiene la definición de clase. Ahora, me estoy confundiendo.
He leído algunas publicaciones en el foro que indican que Visual Studio creará archivos de "diseñador" con clases parciales, lo que parecía prometedor, pero no veo estos archivos de diseñador, incluso cuando veo todos los archivos en VS, cuando Miro el directorio en el disco, o realmente en cualquier otro lado. Claramente, me estoy perdiendo algo. Tal vez no hice la reconstitución del sitio precompilado correctamente? ¿Tal vez haya alguna configuración en web.config o algún otro archivo que deba cambiar?
Cualquier ayuda sería muy apreciada.
Por la petición una versión generalizada de la definición someclass
using System;
using System.Web;
using System.Web.Profile;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
public class Some_Class_Name : Page, IRequiresSessionState
{
/// a bunch of variables defined like this
protected HtmlForm form1;
///a bunch of protected methods defined similarly to this
protected void LinkButtonReturn_Click(object sender, EventArgs e)
{
this.Session.Clear();
base.Response.Redirect("Default.aspx");
}
}
actualización Este parece ser el resultado de la conversión de un sitio pre-compilados de nuevo a la fuente. Los archivos .aspx.cs contienen definiciones de campo de control (si esa es la terminología correcta para lo que ingenuamente llamaría "definiciones de variables") que no deberían, y carecen de la declaración parcial que deberían tener. Especulando violentamente, parece que las definiciones están realmente implícitas en el archivo aspx, por lo que el archivo aspx.cs no las necesita. Muchas gracias a Dan Abramov y a todos los demás que comentaron.
¿Se puede publicar la definición "someclass"? – scottm
Puedo publicar una versión generalizada. – malcolmpdx
No soy un chico de WebForms, pero ¿puedes intentar compilar después de haber eliminado todos los campos de control (como 'form1')? Aunque puedo estar terriblemente equivocado. –