.NET属性生成“必须声明一个正文,因为它没有标记为抽象或外部”编译错误

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

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

它给了我这些行的编译错误:

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

有任何想法吗? 我的理解是这种样式的属性在.NET 3.0中是有效的。

谢谢!


问题原来是我的.sln文件本身。 虽然我在构建选项中更改了目标版本,但在.sln文件中,我发现了这个:

 TargetFramework = "3.0" 

将其更改为“3.5”解决了它。 多谢你们!

添加到web.config

         

您的代码有效 – 它应该可以正常工作。 转到项目的属性页,确保“Target Framework”是.NET 3.0或3.5。

语法有效。 您可以设置不同的访问修饰符。 你不是在界面上吗? 这些课程中的课程是不抽象的呢?

此外,与您所定位的框架的v。无关,因为这是一个编译器function 。 VS2008将为您实现具有后备存储的属性。

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

我将查看引用的标准程序集。 我不确定你需要编译哪个,但我想你有点指向csc.exe的.Net v2.0版本。

该错误不应来自您发布的代码。 根据MSDN,您已经做到了这一点: http : //msdn.microsoft.com/en-us/library/bb384054.aspx

因此,我建议您重新检查错误消息,以及编译器说错误的来源。 您发布的消息的文本没有包含对属性的引用,并且函数有类似的消息…任何缺少实现但不在接口上或标记为abstract或extern的内容都可能生成此错误。

auto-property是C#3.0语言/编译器的一个特性。 如果您使用的是VS 2008,即使您的目标是.NET 2.0,它也应该可以正常工作。 我只是测试它以确保。

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

CodeFile的情况下,2.0编译器尝试重新编译页面,即使您有WebProject而不是WebSite,当然 – 确实失败了。

将属性名称更改为CodeBehind修复了我的问题。

你在哪里定义这个属性? 直接在as * x文件或codeBehind中? (我不认为这可能是一个原因,但如果构建目标是.NET 3.5,我看不到任何其他东西)

这也发生在原始网站项目中,其中没有生成web.config。

虽然解决方案文件说3.5,。Net需要web.config来声明它也能识别。 我运行调试允许它创建一个webconfig,一切正常。

所以它就像提供的答案,但只要确保你有一个。

只要你把摘要放在前面,或者实现方法就可以了。

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

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