c# - else - La propiedad.NET genera un error de compilación "debe declarar un cuerpo porque no está marcado como abstracto o externo"
property c# get set (9)
¿Dónde defines estas propiedades? Directamente en el archivo as * x o en el código de Detrás? (No creo que pueda ser una razón, pero si el build-Target es .NET 3.5 no puedo ver nada más)
Tengo una aplicación web .NET 3.5 (marco de destino). Tengo un código que se ve así:
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? Según entendí, este estilo de propiedad era válido a partir de .NET 3.0.
¡Gracias!
El problema resultó ser mi propio 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"
Cambiando eso a "3.5" lo resolvió. ¡Gracias chicos!
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, recomendaría que volviera a verificar el mensaje de error y de dónde proviene el error del compilador. El texto del mensaje que publicó no incluía una referencia a las propiedades, y hay un mensaje similar para las funciones ... Cualquier cosa que le falte una implementación y no en una interfaz o un resumen o extern marcado puede generar este error.
La propiedad automática es una característica del lenguaje / compilador C # 3.0. Si usa VS 2008, debería funcionar incluso si tiene como objetivo .NET 2.0. SOLO lo probé para estar seguro.
Estás en lo correcto; ese estilo está permitido.
Me gustaría ver los ensamblados estándar a los que se hace referencia. No estoy seguro de cuál necesitaría para compilar, pero supongo que está apuntando a la versión .Net v2.0 de csc.exe.
Este error también puede ocurrir si está utilizando CodeFile = "MyControl.ascx.cs" en su MyControl.ascx en lugar de CodeBehind = "MyControl.ascx.cs".
En el caso de CodeFile , el compilador 2.0 intenta recompilar la página, incluso si tiene un WebProject en lugar de un sitio web y, por supuesto, falla.
Cambiar el nombre del atributo a CodeBehind solucionó el problema en mi caso.
Esto también sucede en un proyecto de sitio web sin procesar donde no se generó web.config.
Aunque el archivo de solución decía 3.5, .Net necesitaba el archivo web.config para indicarlo también para reconocer. Ejecuté la depuración permitiéndole crear un webconfig, y todo estaba funcionando.
Entonces es como la respuesta provista, pero solo asegúrate de tener una.
La sintaxis es valida Y puede establecer diferentes modificadores de acceso. Usted no está en una interfaz, ¿verdad? Y la clase en la que se encuentran no es abstracta ¿verdad?
Además, no importa qué v. Del marco se dirige porque esta es una característica del compilador . VS2008 implementará la propiedad con tiendas de respaldo para usted.
Lo es, siempre que coloque el resumen al frente, o implemente los métodos.
public abstract string LogPath { get; private set; }
public abstract string ErrorMsg { get; private set; }
Tu 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 objetivos" sea .NET 3.0 o 3.5.
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>