2008-09-18 38 views
12

Tengo una aplicación web .NET 3.5 (target framework). Tengo un código que se parece a esto:.NET propiedad que genera "debe declarar un cuerpo porque no está marcado como abstracto o externo" error de compilación

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

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

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

¿Alguna idea? 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. A pesar de que yo estaba cambiando la versión de destino en mis opciones de construcción, en el archivo .sln, encontré esto:

TargetFramework = "3.0" 

Cambiar esa "3.5" resuelto. ¡Gracias chicos!

+0

¿Alguna posibilidad de que puedas publicar toda la clase? El código que ha publicado parece absolutamente correcto para las propiedades automáticas de solo lectura en C# 3.0. –

+1

Para referencia: http://msdn.microsoft.com/en-us/library/bb384054.aspx –

Respuesta

16

agregar a la 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> 
+0

O tal vez crear un archivo web.config :) –

+0

gracias! Esto solucionó mi error también. +1 – David

-7

Es, siempre y cuando ponga abstract al frente, o implemente 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

+0

Está intentando utilizar la generación automática de los métodos, una nueva característica en C# 3.0 – Guvante

+1

MSDN tiene un ejemplo que no usa Resumen: http://msdn.microsoft.com/en-us/library/bb384054.aspx –

+0

la única vez que tiene que usar el resumen es si está orientando .net 2.0 –

1

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

Me gustaría ver los conjuntos 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.

3

La sintaxis es válida. 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 es una característica del compilador. VS2008 implementará la propiedad con tiendas de respaldo para usted.

0

¿Dónde defines esto? 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)

4

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 objetivos" sea .NET 3.0 o 3.5.

+0

¿Por qué debería funcionar esto? He usado auto-propiedades en VS2008 apuntando a .NET 2.0 antes. De hecho, acabo de probarlo de nuevo para asegurarme, y funciona bien. –

+0

Para ser honesto, no creo que debería importar. Debería funcionar bien cuando se apunta a 2.0, ya que las propiedades automáticas son solo una abreviatura de que el compilador se expande en propiedades regulares de todos modos. –

1

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

Por lo tanto, le recomiendo que vuelva a verificar el mensaje de error y de dónde proviene el error del compilador. El texto del mensaje que publicó no incluyó 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.

0

Esto también ocurre en un proyecto de sitio web sin formato 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.

Así que es como la respuesta proporcionada, pero solo asegúrese de tener una.

1

Este error también puede ocurrir si está utilizando CodeFile = "MyControl.ascx.cs" en su lugar de MyControl.ascx 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, no.

Cambiando el nombre del atributo a CodeBehind solucionó el problema en mi caso.

Cuestiones relacionadas