خاصية .NET تولد خطأ في الترجمة "يجب أن تعلن عن نص لأنه لم يتم وضع علامة عليه مجردة أو خارجية".

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>

نصائح أخرى

الكود الخاص بك صالح - يجب أن يعمل بشكل جيد.انتقل إلى صفحات الخصائص الخاصة بمشروعك وتأكد من أن "Target Framework" هو .NET 3.0 أو 3.5.

بناء الجملة صالح.ويمكنك تعيين معدّلات وصول مختلفة.أنت لست على واجهة أنت؟والفصل الذي يوجد فيه هؤلاء ليس مجردًا، أليس كذلك؟

أيضًا، لا يهم ما هو v.من الإطار الذي تستهدفه لأن هذا هو ميزة المترجم.سيقوم VS2008 بتنفيذ الخاصية مع متاجر دعم لك.

انت على حق؛هذا النمط مسموح به.

سأنظر في التجميعات القياسية المشار إليها.لست متأكدًا مما ستحتاج إليه لتجميعه، لكنني أعتقد إلى حد ما أنك تشير إلى إصدار .Net v2.0 من csc.exe.

لا ينبغي أن يأتي هذا الخطأ من الكود الذي نشرته.وفقًا لـ MSDN، لقد قمت بهذا بشكل صحيح: http://msdn.microsoft.com/en-us/library/bb384054.aspx

ومن ثم أنصحك بإعادة التحقق من رسالة الخطأ، والمكان الذي يقول فيه المترجم أن الخطأ يأتي منه.نص الرسالة التي نشرتها لم يتضمن إشارة إلى الخصائص، وهناك رسالة مشابهة للوظائف...أي شيء يفتقد إلى التنفيذ وليس على واجهة أو تم وضع علامة مجردة أو خارجية يمكن أن يؤدي إلى حدوث هذا الخطأ.

الخاصية التلقائية هي إحدى ميزات لغة/مترجم C# 3.0.إذا كنت تستخدم VS 2008، فمن المفترض أن يعمل حتى لو كنت تستهدف .NET 2.0.لقد اختبرت ذلك فقط للتأكد.

يمكن أن يحدث هذا الخطأ أيضًا إذا كنت تستخدم ملف كودي="MyControl.ascx.cs" في MyControl.ascx الخاص بك بدلاً من ذلك CodeBehind="MyControl.ascx.cs".

في حالة ملف كودي, ، يحاول المترجم 2.0 إعادة ترجمة الصفحة، حتى لو كان لديك WebProject بدلاً من WebSite وبالطبع - يفشل.

تغيير اسم السمة إلى CodeBehind إصلاح المشكلة في حالتي.

أين تحدد هذه الخصائص؟مباشرة في ملف as*x أو في codeBehind؟(لا أعتقد أن هذا يمكن أن يكون سببًا، ولكن إذا كان هدف البناء هو .NET 3.5 فلا يمكنني رؤية أي شيء آخر)

يحدث هذا أيضًا في مشروع موقع ويب أولي حيث لم يتم إنشاء web.config.

على الرغم من أن ملف الحل ذكر 3.5، إلا أن .Net يحتاج إلى web.config لتوضيحه أيضًا للتعرف عليه.لقد قمت بتشغيل تصحيح الأخطاء مما سمح له بإنشاء تكوين ويب، وكان كل شيء يعمل.

لذلك فهو مثل الإجابة المقدمة، ولكن فقط تأكد من أن لديك واحدة.

إنه كذلك، طالما وضعت خلاصة أمام، أو تنفيذ الأساليب.

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