Ошибка компиляции .NET property generating “необходимо объявить тело, поскольку оно не помечено как abstract или extern”

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

  •  01-07-2019
  •  | 
  •  

Вопрос

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

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

<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 реализует свойство без резервных хранилищ для вас.

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

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

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

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

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

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

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

Изменение имени атрибута на Кодовая привязка исправлена проблема в моем случае.

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

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

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

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

Это так, до тех пор, пока вы ставите абстрактный спереди, или реализуйте методы.

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

Видишь http://forums.asp.net/t/1031651.aspx

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top