Propiedad .NET que genera un error de compilación "debe declarar un cuerpo porque no está marcado como abstracto o externo"

StackOverflow https://stackoverflow.com/questions/95683

  •  01-07-2019
  •  | 
  •  

Pregunta

Tengo una aplicación web .NET 3.5 (marco de destino).Tengo un código que se parece a este:

public string LogPath { get; private set; }
public string ErrorMsg { get; private set; }

Me está dando este error de compilación para estas líneas:

"must declare a body because it is not marked abstract or extern."

¿Algunas ideas?Tenía entendido que este estilo de propiedad era válido a partir de .NET 3.0.

¡Gracias!


El problema resultó estar en mi archivo .sln.Aunque estaba cambiando la versión de destino en mis opciones de compilación, en el archivo .sln encontré esto:

TargetFramework = "3.0"

Cambiar eso a "3.5" lo resolvió.¡Gracias chicos!

¿Fue útil?

Solución

agregar a web.config

<system.codedom>
    <compilers>
        <compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CSharp.CSharpCodeProvider,System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" warningLevel="4">
            <providerOption name="CompilerVersion" value="v3.5" />
            <providerOption name="WarnAsError" value="false" />
        </compiler>
    </compilers>
</system.codedom>

Otros consejos

Su código es válido; debería funcionar bien.Vaya a las páginas de propiedades de su proyecto y asegúrese de que el "Marco de destino" sea .NET 3.0 o 3.5.

La sintaxis es válida.Y puedes configurar diferentes modificadores de acceso.No estás en una interfaz, ¿verdad?Y la clase en la que están no es abstracta, ¿verdad?

Además, no importa qué v.del marco al que se dirige porque este es una característica del compilador.VS2008 implementará la propiedad con tiendas de respaldo para usted.

Estás en lo correcto;ese estilo está permitido.

Buscaría los ensamblajes estándar a los que se hace referencia.No estoy seguro de qué necesitarías para compilar, pero supongo que estás apuntando a la versión .Net v2.0 de csc.exe.

Ese error no debería provenir del código que publicaste.Según MSDN, has hecho esto bien: http://msdn.microsoft.com/en-us/library/bb384054.aspx

Por lo tanto, le recomendaría que vuelva a verificar el mensaje de error y de dónde dice el compilador que proviene el error.El texto del mensaje que publicaste no incluía una referencia a las propiedades, y hay un mensaje similar para las funciones...Cualquier cosa a la que le falte una implementación y no esté en una interfaz o esté marcada como abstracta o externa puede generar este error.

La propiedad automática es una característica del lenguaje/compilador C# 3.0.Si está utilizando VS 2008, debería funcionar incluso si su objetivo es .NET 2.0.SOLO lo probé para asegurarme.

Este error también puede ocurrir si está utilizando Archivo de código="MyControl.ascx.cs" en su MyControl.ascx en lugar de Código detrás="MiControl.ascx.cs".

En caso de Archivo de código, el compilador 2.0 intenta recompilar la página, incluso si tiene un proyecto web en lugar de un sitio web y, por supuesto, falla.

Cambiar el nombre del atributo a Código detrás solucionó el problema en mi caso.

¿Dónde se definen estas propiedades?¿Directamente en el archivo as*x o en el código subyacente?(No creo que esa pueda ser una razón, pero si el objetivo de compilación es .NET 3.5 no puedo ver nada más)

Esto también sucede en un proyecto de sitio web sin formato donde no se generó ningún web.config.

Aunque el archivo de solución decía 3.5, .Net necesitaba que web.config lo indicara también para reconocerlo.Ejecuté la depuración permitiéndole crear una configuración web y todo estaba funcionando.

Es como la respuesta proporcionada, pero asegúrese de tener una.

Lo es, siempre y cuando pongas abstracto al frente, o implementar los métodos.

public abstract string LogPath { get; private set; }
public abstract string ErrorMsg { get; private set; }

Ver http://forums.asp.net/t/1031651.aspx

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top