关于c#:. NET属性,生成“必须声明一个主体,因为它没有被标记为抽象或外部”,编译错误

关于c#:. NET属性,生成“必须声明一个主体,因为它没有被标记为抽象或外部”,编译错误

.NET property generating “must declare a body because it is not marked abstract or extern” compilation error

我有一个.NET 3.5(目标框架)Web应用程序。 我有一些看起来像这样的代码:

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

这些行给我这个编译错误:

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

有任何想法吗? 我的理解是,这种样式的属性从.NET 3.0开始有效。

谢谢!

问题出在我的.sln文件本身中。 尽管我在构建选项中更改了目标版本,但是在.sln文件中,我发现了这一点:

1
TargetFramework ="3.0"

将其更改为" 3.5"即可解决。 多谢你们!


添加到web.config

1
2
3
4
5
6
7
8
<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>

您的代码有效-应该可以正常工作。进入项目的属性页,并确保"目标框架"为.NET 3.0或3.5。


语法有效。您可以设置不同的访问修饰符。您不在接口上吗?这些所在的类不是抽象的吗?

此外,无论您针对哪个框架,都无关紧要,因为这是编译器功能。 VS2008将为您实现带有后备存储的属性。


如果您在MyControl.ascx中使用CodeFile =" MyControl.ascx.cs"而不是CodeBehind =" MyControl.ascx.cs",也会发生此错误。

在使用CodeFile的情况下,即使您使用的是WebProject而不是WebSite,2.0编译器也会尝试重新编译该页面,并且当然会失败。

将属性名称更改为CodeBehind解决了我的问题。


该错误不应来自您发布的代码。根据MSDN,您已完成此权利:http://msdn.microsoft.com/zh-cn/library/bb384054.aspx

因此,我建议您重新检查错误消息,以及编译器指出错误来自何处。您发布的消息文本不包含对属性的引用,并且对于函数也有类似的消息...任何缺少实现且不在接口上或标记为抽象或外部的东西都可能产生此错误。

自动属性是C#3.0语言/编译器的功能。如果您使用的是VS 2008,即使您以.NET 2.0为目标,它也应该可以正常工作。我只是对其进行测试以确保。


你是对的;这种风格是允许的。

我将研究引用的标准程序集。我不确定要编译哪个文件,但是我认为您指的是csc.exe的.Net v2.0版本。


在未生成web.config的原始网站项目上也会发生这种情况。

尽管解决方案文件为3.5,但.Net仍需要web.config声明它也可以识别。我进行了调试,允许它创建一个webconfig,并且一切正常。

因此,就像提供的答案一样,只是确保您有一个答案。


您在哪里定义此属性?直接在as * x文件中还是在代码背后? (我不认为这可能是原因,但是如果build-Target是.NET 3.5,则看不到其他任何内容)


只要您将摘要放在最前面,或实现这些方法即可。

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

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


推荐阅读