المارشال جيترفوريكسسيبتيون


لدي بعض رمز إو الذي يقرأ تيار داخل محاولة ..catch. فإنه يمسك إوكسيبتيون ويدعو System. Runtime. InteropServices. Marshal. GetHRForException () داخل الصيد، في محاولة لاتخاذ إجراءات مختلفة استنادا إلى هريسولت. شيء من هذا القبيل: ولكن تشغيل هذه التعليمات البرمجية داخل أسب مع تروستميديوم، أحصل على هذا الاستثناء: سؤالين: أعتقد أن الاستثناء يحدث لأن جيثرفوريكسيبتيون يدعو إلى التعليمات البرمجية غير المدارة، والتي لا يسمح في الثقة المتوسطة. تصحيح يتم طرح هذا الاستثناء، وليس في وقت تنفيذ جيثرفوريكسيبتيون، ولكن في الوقت الذي يتم جيتد الأسلوب - الصحيح (ستاكتريس يظهر طريقة بلدي، ولكن أنا 99 على وجه التحديد أن استثناء إو لم يحدث) إذا كان الأمر كذلك، هل هناك طريقة بالنسبة لي لتغيير السلوك في بيئة الثقة الجزئية، حتى أنني لا أدعو جيثرفوريكسيبتيون (رمز غير مدار) حيث لا يسمح به وبعبارة أخرى، كيف يمكنني السماح جيت لتحقيق النجاح في وقت الترجمة، في حين أيضا تقييم في وقت التشغيل ما إذا كانت التعليمات البرمجية يجب استدعاء جيثرفوريكسيبتيون () شيء من هذا القبيل: أعتقد أن هناك آلية وقت التشغيل لاختبار إذا كانت الأذونات المتاحة، ولكن لم يكن قادرا على العثور عليه. تصحيح . هل هذه المادة بلوق الجواب شونفا مايكروسوفت يقول أنك لا تستطيع أن تفعل محاولة. (سيكوريتيكسسيبتيون) حول طريقة محمية بواسطة لينكديماند. إذا تم استدعاء ميثودا () ميثودب () و ميثودب () مع لينكديماند للحصول على ثقة كاملة، ثم يتم تحديد لينكديماند مع ميثودا يتم جيتد. لذلك لتجنب سيكوريتيكسسيبتيون، أحتاج إلى استخراج Marshal. GetHRForException إلى طريقة منفصلة. هل هذا الصحيح تطبيقي على التعليمات البرمجية، ميثودا () قد تكون التعليمات البرمجية التي تستدعي القراءة، ثم في الصيد يحاول الاتصال جيثرفوريكسيبتيون (). جيثرفوريكسيبتيون هو ميثودب (). يتم تقييم لينكديماند عندما ميثودا () هو جيتد. (هذا لينكديماند فشل في بلدي سيناريو أسب متوسطة الثقة). إذا قمت بنقل جيثرفوريكسيبتيون إلى طريقة جديدة ميثودك ()، و مشروط استدعاء ميثودك () فقط بعد إذن حتمي. ديماند () ينجح، نظريا يجب أن تكون قادرة على تجنب سيكوريتيكسسيبتيون في وقت جيت لأن ميثودك () سيكون جيتد فقط بعد إذن. الرئيسي () ينجح. طلب 12 يوليو 09 في 14:20 الطريقة المطلوبة هي SecurityPermission. IsUnrestrict (). وهي ترجع خطأ أو خطأ يشير إلى ما إذا كان الإذن مسموحا أم لا. أنها لا تتطلب إذن، كما يفعل SecurityPermission. Demand (). يمكنني استخدام إيسونريستكتد مع SecurityPermissionFlag. UnmanagedCode لمعرفة ما إذا كان يسمح للجمعية استدعاء التعليمات البرمجية غير المدارة ثم قم باستدعاء التعليمات البرمجية غير المدارة فقط إذا سمح. هناك تطور إضافي واحد. يقوم مترجم جيت، عند تجميع طريقة، بالتحقق من كونديكاتسبرميسيون لينكديماندس على أي طريقة تسمى بلدي طريقة ليتم تجميعها. يتم وضع علامة Marshal. GetHRForException () مع لينكديماند. وبالتالي، سوف الأسلوب الذي يدعو Marshal. GetHRForException () رمي سيكوريسيكسيبتيون غير قابل للتغيير في وقت جيت تجميع عندما تعمل في بيئة مقيدة مثل أسب مع الثقة المتوسطة. لذلك، يجب علينا أبدا جيت الأسلوب الذي يدعو Marshal. GetHRForException () في هذه الحالة، مما يعني أنني بحاجة إلى كسر Marshal. GetHRForException () إلى طريقة منفصلة في التعليمات البرمجية التي تسمى (وبالتالي جيتد) فقط عندما أونماناجيدكود هو غير مقيدة. هيريس بعض الأمثلة رمز: أجاب 20 يوليو 09 في 17:56 نعم - الثقة المتوسطة لن تسمح المكالمات إلى رمز غير مدار. مستوى الثقة الوحيد الذي يسمح لها هو الثقة الكاملة. هذا يعتمد. يمكن أن تحدث متطلبات كاس في وقت التشغيل، ولكن بيئة الاستضافة يمكن أن تذهب أيضا على وجوههم والبحث عن الأشياء التي لا يمكن القيام به. يمكنك اختبار لمعرفة ما إذا كان يمكنك إجراء مكالمة إلى التعليمات البرمجية غير المدارة باستخدام طلب كاس مع مثيل سيكوريتيبرميسيون. رمز لجعل الطلب كاس يشبه هذا الرد أجاب 12 يوليو 09 في 14:32 موافق، وهذا هو معلومات كبيرة. وهذا يغطي الجزء ب من Q3. ولكن ماذا عن جزء كيف يمكنني الحصول على تجميع جيت للنجاح هل يمكنني وضع علامة على الأسلوب الخاص بي مع سمة أمان أو. تذكر، نظريتي هي أن خطأ سيكوريتيبرميسيون لا يحدث في وقت التشغيل، فإنه يحدث خلال جيت - وأعتقد أنك أكدت أن هذا ممكن. لذا فإن السؤال هو، كيف يمكنني كتابة التعليمات البرمجية للسماح جيت لجمع. نداش تشيسو يوليو 12 09 في 15:50 ينبغي أن يحدث في وقت التشغيل، وإلا فإن التجمع لن حتى 39t تحميل - ولكي يحدث هذا التجمع يحتاج إلى وضع علامة على أنها تتطلب الإذن. حتى ذلك الحين أن 39s يمكن التحقق من وقت التشغيل، كما سيحدث على تحميل التجمع، والتي يمكن أن تكون في وقت التشغيل. نداش بلودارت يوليو 12 09 في 16:24 نوع مختلف من الاختيار، مطالب الارتباط هي سمات على طريقة، ويتم التحقق في الواقع في وقت جيت. It39s تستخدم كثيرا من قبل الإطار نفسه و it39s نادرة لرؤيته خارج مصدر كلر. ما أظهره هو مطلب حتمي، وليس إعلانية مثل سيكوريتبيرميسيون (SecurityAction. LinkDemand، غير مقيد صحيح) نداش بلودارت يوليو 12 09 في 18: 55 استهداف 1.6 على زامارين دائرة الرقابة الداخلية. لا Marshal. GetHRForException إم استهداف معيار 1.6 على زامارين. كما خارج مقدمي مكتبة المصب كلها تتحرك بعيدا عن يكل، ونحن بحاجة إلى الانتقال إلى معيار من أجل الحفاظ على تلقي التحديثات. واحدة من المكتبات القياسية التي نستهلكها (هذا واحد - nuget. orgpackagesSerilog. Sinks. Seq2.0.1)، يتضمن مكالمة إلى Marshal. GetHRForException. يبدو كما لو لم يتم تضمين هذه الطريقة في mscorlib. dll شحنها مع Xamarin. iOS وفقا لهذا المنصب، منذ عدة سنوات: مسكورليب على دائرة الرقابة الداخلية لا يدعم هذه الدعوة - ​​التي ربما كانت عادلة بما فيه الكفاية ثم - وأنا على الأرجح توافق على أن فإنه لا ينبغي أن تحتاج الآن. ما تفعله نوافذ كوم القديمة تفعل في لمحة عبر منصة هو أبعد مني. ولكن هناك. وأنا لا يمكن إيقاف مقدمي المكتبة من استخدامه. ومع ذلك، كما أفهم أنه جيثرفوريكسيبتيون هو جزء من نيتستاندارد 1.6 الشخصية، وإذا زامارين يوس هو أن يتوافق مع هذا الملف ثم يحتاج إلى دعم ذلك. صحيح هل هذا الإشراف في الدعم القياسي Xamarin. iOS. أو أنا سوء الفهم أساسا الوضع. يبدو وكأنه الرقابة غرايمكريستي - وقد أثيرت في بوجزيلا ويبدو وكأنه تم تقديم إصلاح الذي سيجعله في إصدار مستقبلي. أي فكرة عندما يتم الافراج عن هذا الإصلاح. قضية بوجزيلا تنص على: ماريك صفر 2016-08-24 10:06:49 أوتك الثابتة في C8. على 2408. على افتراض أن C8 دورة 8، الإصدار زامارين بيتا من 2408 لا يتضمن هذا الإصلاح. هل الإصلاح يغيب فقط القارب. هل أتوقع أن أراه في الإصدار بيتا المقبل

Comments