Генерирование свойства .NET "должно объявлять тело, потому что оно не помечено как абстрактное или внешнее" ошибка компиляции - PullRequest
12 голосов
/ 18 сентября 2008

У меня есть веб-приложение .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 ]

16 голосов
/ 17 июля 2009

добавить в 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>
4 голосов
/ 18 сентября 2008

Ваш код действителен - он должен работать нормально. Перейдите на страницы свойств вашего проекта и убедитесь, что «Target Framework» - это .NET 3.0 или 3.5.

3 голосов
/ 18 сентября 2008

Синтаксис действителен. И вы можете установить различные модификаторы доступа. Вы не находитесь на интерфейсе? И класс, в котором они находятся, не абстрактный, не так ли?

Кроме того, не имеет значения, на какую v. Платформы вы нацеливаетесь, потому что это функция компилятора . VS2008 будет реализовывать собственность с бэк-магазинами для вас.

1 голос
/ 14 октября 2009

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

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

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

1 голос
/ 18 сентября 2008

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

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

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

1 голос
/ 18 сентября 2008

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

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

0 голосов
/ 25 августа 2009

Это также происходит в необработанном проекте веб-сайта, где не было сгенерировано web.config.

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

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

0 голосов
/ 18 сентября 2008

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

0 голосов
/ 18 сентября 2008

Это так, пока вы ставите abstract вперед или реализуете методы.

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...