.NET свойство генерации "необходимо объявить тело, поскольку оно не помечено абстрактной или extern" ошибка компиляции

у меня есть веб-приложение .NET 3.5 (target framework). У меня есть код, который выглядит так:

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 " решило его. Спасибо, ребята!

9 ответов


добавить в 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>

ваш код действителен - он должен работать нормально. Перейдите на страницы свойств вашего проекта и убедитесь, что "целевая платформа" - .NET 3.0 или 3.5.


синтаксис. И вы можете установить различные модификаторы доступа. Вы не на интерфейс ты? А класс это не аннотация это?

кроме того, не имеет значения, какой v. фреймворка вы нацеливаете, потому что это функции компилятора. VS2008 реализует свойство w / backing stores для вас.


вы правы; этот стиль разрешен.

Я бы посмотрел на стандартные сборки, на которые ссылаются. Я не уверен, что вам нужно будет это скомпилировать, но я полагаю, что вы указываете на .Net v2.0 версия csc.исполняемый.


эта ошибка не должна исходить из кода, который вы опубликовали. Согласно MSDN, вы сделали это правильно:http://msdn.microsoft.com/en-us/library/bb384054.aspx

поэтому я бы рекомендовал вам повторно проверить сообщение об ошибке и где компилятор говорит, что ошибка исходит. Текст опубликованного сообщения не содержит ссылки на свойства, и аналогичное сообщение имеется для функций... Все, что отсутствует в реализации, а не на интерфейс или помеченные абстрактные или extern может создать эту ошибку.

свойство auto является особенностью языка / компилятора C# 3.0. Если вы используете VS 2008, он должен работать, даже если вы нацелены на .NET 2.0. Я просто проверил, чтобы убедиться.


эта ошибка также может произойти, если вы используете CodeFile= " MyControl.ascx вносятся.cs " в вашем MyControl.ascx и вместо CodeBehind= " MyControl.ascx вносятся.цезий."

в случае CodeFile, компилятор 2.0 пытается перекомпилировать страницу, даже если у вас есть веб - проект вместо веб-сайта, и, конечно, - не удается.

изменение имени атрибута CodeBehind Исправлена проблема в моем случае.


где вы определяете эти свойства? Непосредственно в файле as*x или в codeBehind? (Я не думаю, что это может быть причиной, но если целью сборки является .NET 3.5, я больше ничего не вижу)


Это также происходит в проекте необработанного веб-сайта, где не было интернета.сгенерированная конфигурация.

хотя файл решения сказал 3.5, .Net нужен интернет.config, чтобы указать его и распознать. Я запустил debug, позволив ему создать webconfig, и все работало.

Так это как ответ, но просто убедитесь, что у вас есть.


Это, как долго, как вы положите аннотация спереди, или реализовать методы.

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

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