سؤال

جئت عبر قضية يجعلني أعتقد أن هناك خلل في الإطار 3.0.عند محاولة استخدام طرق الإرشاد أحصل على الخطأ التالي:

Missing compiler required member
'System.Runtime.CompilerServices.ExtensionAttribute..ctor'

عند استخدام هذا كود بسيط:

public static class StringUtils {
    static void TestExtension(this String targetString) {

    }
}

الطريقة الوحيدة لجعل هذا خطأ ترجمة تذهب بعيدا إضافة التعليمات البرمجية التالية:

namespace System.Runtime.CompilerServices {
    public class ExtensionAttribute : Attribute { }
}

لقد مرت عدة أشهر منذ أن كنت قد تستخدم امتداد الطرق, ولكن أنا متأكد من أنني لم يكن لديك للقيام بذلك.وقد أي شخص آخر تأتي عبر هذه المسألة ؟

هل كانت مفيدة؟

المحلول

وركضت للتو في هذه المشكلة نفسي. في حالتي، كان لأنني بتحويل مشروع VS 2005 / صافي 2.0 إلى / صافي 3.5 المشاريع VS 2008. أداة تحويل تبقى الإشارة إلى System.Core 2.0، وأنا لا يمكن أن تجد وسيلة سهلة لتغيير ما يشير إلى System.Core 3.5.

وانتهى بي الأمر إعادة إنشاء المشروع في VS 2008 من الصفر، وأنشئت من أجلها مع المراجع المناسبة لSystem.Core 3.5

نصائح أخرى

ولدي نفس المشكلة بالضبط. وSystem.Runtime.CompilerServices.ExtensionAttribute..ctor الخطأ هو خفي إلى حد ما، ويمكن أن يعني عددا من الأشياء المختلفة.

ولكن، بالنسبة لي إنه المغلي الى حقيقة أنني أستخدم Newtonsoft.Json.Net. أزلت الإشارة إلى Newtonsoft.Json.Net20.dll الملف، وإعادة بإضافة عليه. بعد هذا الحل بلدي يبني من جديد.

ووالأغرب أنه عندما حاولت معرفة ما كان مختلفا بعد هذا الإجراء باستخدام التخريب الفرق، لا شيء يبدو قد تغيرت.

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

UPDATE 1 :

لتلك التي تأتي عبر هذا مرة أخرى، كما أشار comenters بها، والطريقة الصحيحة لإصلاح هذا هو <وأ href = "http://json.codeplex.com/releases/view/50552" يختلط = "نوفولو noreferrer"> تحميل Json.Net في ZIP ، ويجب أن يكون هناك 3.5 الإصدار، وإعادة إشارة 3.5 في كل مكان كنت تستخدم Json.Net وحذف الإشارة القديمة، كما أنه من المرجح الرجوع إلى التجميع الذي بنيت للإصدارات القديمة من صافي.

UPDATE 2 :

تشارلي الزهور يشير إلى أن العلامات DLL NewtonSoft بأنها مقابل 3.5 هو في الواقع لن يعمل مع 3.5 . لديك لاستخدام DLL أنها تسمية بأنها لصافي 2.0

وفي VS، انقر فوق مشروع (بجانب ملف، تحرير، عرض)، حدد خصائص

وبعد ذلك في علامة التبويب التطبيق (ستلاحظ كنت بالفعل في 3.5)، حدد الإطار الهدف إلى 2.0، ثم ترجمة (سيكون خطأ). ثم وضعها مرة أخرى إلى 3.5، ثم ترجمة مرة أخرى، وسوف تختفي الخطأ

واعتقد انها مجرد خلل صغير في Visual Studio، مجرد خداع IDE: -)

وكان لي نفس المسألة في مشروع مكتبة الفئة التي كنت قد ترقيتها من VS 2008 VS 2010 بيتا 2. أنا لم يضف أي طرق الإرشاد في المشروع حتى بعد الترقية، ثم بدأت رؤية نفس الخطأ.

وإضافة فئة مع التعليمات البرمجية التالية إلى مشروع حل المشكلة:

namespace System.Runtime.CompilerServices
{
    public class ExtensionAttribute : Attribute { }
}

والعثور على الطرف على هذا بلوق: http://blog.flexforcefive.com/؟p=105

الإطار الخاص بك ليست عالية بما فيه الكفاية بالنسبة طرق الإرشاد.
هذا هاك لصنع أساليب الإرشاد العمل دون أن يكون في 3.5

ما هو إصدار. NET أنت استهداف؟ يتم شحنها الطبقة ExtensionAttribute في System.Core.dll (.NET 3.5)، ولكن يمكنك إعادة يعلن-بنفسك إذا كنت ترغب في استخدام طرق الإرشاد في. NET 2.0 / 3.0 (مع C # 3.0، من الواضح). في الواقع، LINQBridge يفعل ذلك.

[التحديث] ومع ذلك، أنا مرتبك قليلا، لأن الخطأ الذي <م> يجب تراه هو:

<اقتباس فقرة>   

وخطأ 1 لا يمكن تحديد ملحق جديد   الأسلوب لأن المترجم المطلوب   اكتب   "System.Runtime.CompilerServices.ExtensionAttribute"   لايمكن إيجاده. هل في عداد المفقودين   إشارة إلى   System.Core.dll؟ [مقصوص بعض الاشياء مسار]

مفقود النظام.المرجعية الأساسية سوف تعطي هذه الأعراض.

وتحدث هذه المشكلة في الواقع من قبل مرجع غير صحيح إلى الإصدار 2 من System.Core. يحدث هذا عادة عند الترقية من إصدار سابق من .NET لالصافي 3.5. إذا كان الموقع الذي كنت تواجه هذه المشكلة في ومن ثم يمكن معالجتها عن طريق اتباع الخطوات التالية:

1) في الملف web.config إضافة مرجع إلى System.Core V3.5:

<assemblies>
   <add assembly="System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
</assemblies>

2) في الملف web.config إضافة التالية كتابع التكوين:

<configuration>
   <!--Some other config-->
   <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
         <assemblyIdentity name="System.Core" publicKeyToken="B77A5C561934E089"/>
         <bindingRedirect oldVersion="2.0.0.0-2.1.0.0" newVersion="3.5.0.0"/>
      </dependentAssembly>
   </assemblyBinding>
</configuration>

لإشارة الجارية:

ولقد حارب الرسالة بالضبط الخطأ نفسه لمدة الساعات الأخيرة في .NET Framework 4.0 وتتبع في النهاية وصولا الى اشارة التالفة إلى دلل Microsoft.CSharp. وكان هذا مسألة بسيطة محبط. أنا حذفت الإشارة المخالف وأضاف في إشارة "الجديدة" التي دلل التي كانت تقع في:

C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\Microsoft.CSharp.dll

ونأمل أن هذا سيوفر شخص آخر الوقت وتفاقم تعقب حل لرسالة الخطأ هذه.

يتم إدخال

والإضافات في C # 3.0، والتي من ناحية أخرى تم تقديمها في .NET Framework 3.5 لذلك لا يمكن حقا استخدامها في .NET Framework 3.0 مباشرة.

هل هذا مشروع موقع على شبكة الإنترنت، عن طريق الصدفة؟ حاول تغيير الإطار الهدف من .NET Framework 3.5 إلى إصدار سابق، ومن ثم العودة إلى .NET Framework 3.5.

وجرب: مشروع، إضافة مرجع، والعثور على النظام الأساسي 3.5.0.0 في القائمة، وفوق موافق لإضافته

ومجرد استهداف مشروع VS لإطار. NET 3.5 وما فوق. وأغلب الظن قمت بتحويل المشروع من إصدار سابق.

وكان لي نسخة من Elmah.Sandbox التي كانت تستهدف صافي 2.0 في مشروع صافي 4.0 القائمة. أضفت طريقة التمديد لمشروعي وفشل بناء مع "مترجم عضو مفقود المطلوبة" رسالة الخطأ.

وأدرج دلل Elmah.Sandbox كجزء من نسخة مبكرة من ElmahR. وبمجرد إزالة هذا، كل ذلك بنيت مرة أخرى.

في حالتي كان السبب النسخة NET20 الخطأ من مايكروسوفت AntiXSSLibrary.dll. استبدال NET35 - ذهب خطأ

وتحرير csproj وتأكد يتم تضمين هذه الإشارات (انها لن تعمل عن طريق بسيطة "إضافة مرجعية" ...):

<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Net.Http" />
<Reference Include="System.Xml" />
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top