.NET geradora de propriedade “deve declarar um corpo porque não está marcado abstrato ou externo” erro de compilação

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

  •  01-07-2019
  •  | 
  •  

Pergunta

Eu tenho um aplicativo 3.5 (framework alvo) web .NET. Eu tenho algum código parecido com este:

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

Ele está me dando esse erro de compilação para estas linhas:

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

Todas as idéias? O meu entendimento é que este estilo de propriedade foi válida a partir de .NET 3.0.

Obrigado!


O problema acabou por ser no meu próprio arquivo .sln. Embora eu estava mudando a versão de destino em minhas opções de construção, no arquivo .sln, eu encontrei este:

TargetFramework = "3.0"

Mudar isso para "3.5" resolveu. Thanks, guys!

Foi útil?

Solução

adicionar à 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>

Outras dicas

O seu código é válido - ele deve funcionar bem. Ir para as páginas de propriedades do seu projeto e certifique-se de que o "Target Framework" é .NET 3.0 ou 3.5.

A sintaxe é válido. E você pode definir diferentes modificadores de acesso. Você não está em uma interface é você? E a classe estes estão em não é abstrato é?

Além disso, não importa o que v. Do quadro você alvo porque este é uma característica do compilador . VS2008 irá implementar a propriedade w / backing lojas para você.

Você está correto; que é permitido estilo.

Eu olhar para as assembleias norma de referência. Eu não tenho certeza que você precisa para conseguir que para compilar, mas eu acho que um pouco você está apontando para a versão .Net v2.0 de csc.exe.

Esse erro não deve ser proveniente do código que você postou. De acordo com MSDN, você fez esse direito: http://msdn.microsoft .com / en-us / library / bb384054.aspx

Por isso eu recomendo que você verifique novamente a mensagem de erro, e onde o compilador diz que o erro está vindo. O texto da mensagem que você postou não inclui uma referência a propriedades, e não há uma mensagem semelhante para funções ... Qualquer coisa que está faltando uma implementação e não em uma interface ou marcado abstrato ou externo pode gerar este erro.

O auto-propriedade é uma característica do C # 3.0 idioma / compilador. Se você estiver usando VS 2008, ele deve funcionar mesmo se você está direcionando .NET 2.0. EU APENAS testado para certificar-se.

Este erro também pode acontecer se você estiver usando CodeFile = "MyControl.ascx.cs" em sua MyControl.ascx em vez de CodeBehind = "MyControl.ascx.cs ".

Em caso de CodeFile , os 2.0 tenta compilador para recompilar a página, mesmo se você tiver um WebProject em vez de um site e, é claro - não falhar.

A alteração do nome do atributo para CodeBehind corrigiu o problema no meu caso.

Onde você definir esse Propriedades? Diretamente no * x arquivo como ou no codebehind? (Eu não acho que pode ser uma razão, mas se o build-alvo é NET 3.5 Eu não consigo ver qualquer outra coisa)

Isso também acontece em um projeto web site cru onde não havia web.config gerado.

Embora o arquivo de solução afirmou 3.5, .Net precisava do web.config para indicá-lo também de reconhecer. Corri de depuração que lhe permite criar um webconfig, e tudo estava funcionando.

Por isso, é como a resposta dada, mas apenas certifique-se você tiver um.

É, contanto que você colocar abstract na frente, ou implementar os métodos.

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

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top