2011-07-28 19 views
5

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.

+0

¿Se puede publicar la definición "someclass"? – scottm

+0

Puedo publicar una versión generalizada. – malcolmpdx

+0

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. –

Respuesta

2

Puedo ser terriblemente fuera de lo común, pero sospecho que el compilador genera clases parciales basadas en el código aspx. Si esto es cierto, dichas clases obviamente contendrían campos como form1.

Quitaría todas las declaraciones del campo de control y vería si esto ayuda. Tenga en cuenta que no soy un chico de WebForms, así que esto es una suposición.

+0

Ya sabes, es posible que lo hayas clavado. Comparando la versión I reconstituida con Reflection con una versión mucho más antigua del mismo código, y los archivos aspx.cs carecen de cualquiera de las definiciones de campo de control. Quitarlos, pero dejando la palabra clave parcial en su lugar (que también existe en la versión anterior del código) parece que está resolviendo cualquier conflicto. ¡Gracias! Definitivamente diré que esto respondió al menos esta parte del problema. – malcolmpdx

4

Esta pregunta es un poco antigua, pero acabo de encontrarme con un problema similar al descompilar el código .NET usando Reflector.

El motivo por el que recibe estos errores es por la directiva de la página "CodeFile = ..." en su página ASPX. Cuando ASP.NET ve la directiva CodeFile genera automáticamente un archivo de diseñador (es decir, una clase parcial con definiciones de control). Cambiar la directiva CodeFile a una directiva CodeBehind resolvió todos mis problemas.

Espero que esto pueda ayudar a alguien más.

+0

+1 Eliminé un archivo .designer y resolvió el problema. Simplemente dos lugares donde se declaraba el nombre de la clase. –

0

Un problema relacionado, pero no exactamente similar, se me ocurrió hoy al implementar un trozo de servicio web utilizando WCF. Al crear un talón de servicio web desechable y un proxy para el diseño de prototipos, puse inadvertidamente el código generado automáticamente en el mismo espacio de nombres que el código de definición del servicio.

Mi solución fue mover el proxy del cliente autogenerado, a su propio espacio de nombres y todo estaba bien.

Cuestiones relacionadas