La propriété .NET générant & # 8220; doit déclarer un corps car il n'est pas marqué abstrait ou externe & # 8221; erreur de compilation

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

  •  01-07-2019
  •  | 
  •  

Question

J'ai une application Web .NET 3.5 (framework cible). J'ai du code qui ressemble à ceci:

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

Cela me donne cette erreur de compilation pour ces lignes:

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

Des idées? Je croyais comprendre que ce style de propriété était valide à partir de .NET 3.0.

Merci!

Le problème s’est avéré être dans mon fichier .sln lui-même. Bien que je changeais la version cible dans mes options de construction, dans le fichier .sln, j’ai trouvé ceci:

TargetFramework = "3.0"

Modification de ce paramètre en "3.5" résolu. Merci les gars!

Était-ce utile?

La solution

ajouter au 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>

Autres conseils

Votre code est valide - il devrait bien fonctionner. Accédez aux pages de propriétés de votre projet et assurez-vous que le "Cadre cible". est .NET 3.0 ou 3.5.

La syntaxe est valide. Et vous pouvez définir différents modificateurs d'accès. Vous n'êtes pas sur une interface, n'est-ce pas? Et la classe dans laquelle ils sont n'est pas abstraite, n'est-ce pas?

De plus, peu importe le v. de l'infrastructure que vous ciblez, car il s'agit d'une fonctionnalité de compilateur . VS2008 mettra en œuvre la propriété avec sauvegarde des magasins pour vous.

Vous avez raison; ce style est autorisé.

Je regarderais dans les assemblys standard référencés. Je ne sais pas exactement ce dont vous auriez besoin pour compiler cela, mais je suppose que vous pointez un peu vers la version .Net v2.0 de csc.exe.

Cette erreur ne devrait pas provenir du code que vous avez posté. Selon MSDN, vous avez respecté ce droit: http://msdn.microsoft .com / fr-us / library / bb384054.aspx

Par conséquent, je vous recommanderais de revérifier le message d'erreur et d'indiquer d'où le compilateur dit que l'erreur vient. Le texte du message que vous avez posté n'incluait pas de référence aux propriétés, et il existe un message similaire pour les fonctions ... Tout ce qui manque à une implémentation et non à une interface, à un résumé marqué ou à un externe marqué peut générer cette erreur.

La propriété auto est une fonctionnalité du langage / compilateur C # 3.0. Si vous utilisez VS 2008, cela devrait fonctionner même si vous ciblez .NET 2.0. Je viens de le tester pour être sûr.

Cette erreur peut également se produire si vous utilisez CodeFile = "MyControl.ascx.cs". dans votre MyControl.ascx au lieu de CodeBehind = "MyControl.ascx.cs".

Dans le cas de CodeFile , le compilateur 2.0 essaie de recompiler la page, même si vous avez un projet Web au lieu d'un site Web et, bien sûr, échoue.

La modification du nom de l'attribut en CodeBehind a résolu le problème dans mon cas.

Où définissez-vous ces propriétés? Directement dans le fichier as * x ou dans le codeBehind? (Je ne pense pas que cela puisse être une raison, mais si build-Target est .NET 3.5, je ne vois rien d’autre.)

Cela se produit également sur un projet de site Web brut dans lequel aucun fichier web.config n'a été généré.

Bien que le fichier de solution dise 3.5, .Net avait besoin de web.config pour l'indiquer également. J'ai lancé le débogage lui permettant de créer une configuration Web, et tout fonctionnait correctement.

Cela ressemble donc à la réponse fournie, mais assurez-vous d’en avoir une.

C’est le cas, tant que vous mettez résumé devant, ou implémentez les méthodes.

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

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top