Proprietà .NET che genera l'errore di compilazione "è necessario dichiarare un corpo perché non è contrassegnato come abstract o extern".

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

  •  01-07-2019
  •  | 
  •  

Domanda

Ho un'applicazione Web .NET 3.5 (framework di destinazione).Ho un codice che assomiglia a questo:

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

Mi da questo errore di compilazione per queste righe:

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

Qualche idea?La mia comprensione era che questo stile di proprietà era valido a partire da .NET 3.0.

Grazie!


Il problema si è rivelato essere nel mio file .sln stesso.Anche se stavo modificando la versione di destinazione nelle opzioni di build, nel file .sln ho trovato questo:

TargetFramework = "3.0"

Cambiarlo in "3.5" ha risolto il problema.Grazie ragazzi!

È stato utile?

Soluzione

aggiungi 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>

Altri suggerimenti

Il tuo codice è valido: dovrebbe funzionare correttamente.Accedi alle pagine delle proprietà del tuo progetto e assicurati che il "Target Framework" sia .NET 3.0 o 3.5.

La sintassi è valida.E puoi impostare diversi modificatori di accesso.Non sei su un'interfaccia, vero?E la classe in cui si trovano non è astratta, vero?

Inoltre, non importa cosa v.del framework a cui ti rivolgi perché questo è una funzionalità del compilatore.VS2008 implementerà la proprietà con i negozi di supporto per te.

Hai ragione;quello stile è consentito.

Esaminerei gli assiemi standard a cui si fa riferimento.Non sono sicuro di quale avresti bisogno per compilarlo, ma immagino che in qualche modo tu stia indicando la versione .Net v2.0 di csc.exe.

Questo errore non dovrebbe provenire dal codice che hai pubblicato.Secondo MSDN, hai fatto bene: http://msdn.microsoft.com/en-us/library/bb384054.aspx

Quindi ti consiglierei di ricontrollare il messaggio di errore e da dove il compilatore dice che proviene l'errore.Il testo del messaggio che hai pubblicato non include un riferimento alle proprietà e c'è un messaggio simile per le funzioni...Tutto ciò a cui manca un'implementazione e non su un'interfaccia o contrassegnato come abstract o extern può generare questo errore.

La proprietà automatica è una funzionalità del compilatore/linguaggio C# 3.0.Se stai utilizzando VS 2008, dovrebbe funzionare anche se hai come target .NET 2.0.L'ho appena testato per esserne sicuro.

Questo errore può verificarsi anche se si utilizza CodeFile="MyControl.ascx.cs" nel tuo MyControl.ascx invece di CodeBehind="IlMioControllo.ascx.cs".

In caso di CodeFile, il compilatore 2.0 tenta di ricompilare la pagina, anche se hai un WebProject invece di un WebSite e, ovviamente, fallisce.

Modifica del nome dell'attributo in CodeBehind risolto il problema nel mio caso.

Dove definisci queste Proprietà?Direttamente nel file as*x o nel codeBehind?(Non penso che possa essere un motivo, ma se il build-Target è .NET 3.5 non riesco a vedere nient'altro)

Ciò accade anche su un progetto di sito Web non elaborato in cui non è stato generato web.config.

Sebbene il file della soluzione dicesse 3.5, .Net aveva bisogno che web.config lo dichiarasse anche per riconoscerlo.Ho eseguito il debug consentendogli di creare un webconfig e tutto funzionava.

Quindi è come la risposta fornita, ma assicurati di averne una.

Lo è, purché lo metti astratto di fronte o implementare i metodi.

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

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top