.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; }