سؤال

لدي عقود التعليمات البرمجية تعمل بشكل جيد من داخل Visual Studio 2010، لكن لا يمكنني الحصول عليها ccrewrite.exe لفعل أي شيء مفيد من سطر الأوامر.إليك نموذجًا للتطبيق:

using System.Diagnostics.Contracts;

public class Dummy
{
    public static void Main(string[] args)
    {
        Contract.Requires(args.Length > 0);
    }
}

ثم أقوم بتجميع الكود وتشغيل ccrewrite.exe عليه:

> csc /debug+ /D:CONTRACTS_FULL Dummy.cs

> ccrewrite /o:RewrittenDummy.exe Dummy.exe
elapsed time: 61ms

لا يوجد RewrittenDummy.exe الملف بعد ذلك.

لقد جربت الكثير من الخيارات، لكن لا شيء يحدث أي فرق.بعض الأشياء التي لاحظتها:

  • إنه بالتأكيد يقوم بتحميل Dummy.exe، لأنه إذا قمت بتحديد ملف غير موجود، فإنه يموت
  • يحتوي Dummy.exe بالتأكيد على إشارات إلى Contract - إذا قمت بتشغيله بدون وسيطات، فإنه يفشل بشكل مناسب (ولكن لم يتم ملء رسالة الخطأ كما كنت أتوقع إذا تمت إعادة كتابتها)
  • استخدام الشروط اللاحقة والثوابت لا يحدث فرقًا

لقد حاولت تحويل التحذيرات والوفاء ، وهذا لا يساعد على الإطلاق ماذا أفعل خطأ؟

(وسئل أيضا باسم أ سؤال في منتدى العقود المدونة.سأضيف أي إجابات ذات صلة هنا بنفسي.)

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

المحلول

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

اقرأ مشاركة المنتدى للحصول على التفاصيل الكاملة، ولكن المشكلة الأساسية هي ذلك ccrewrite لم أتمكن من العثور على فئات العقد:كان يبحث في إصدار .NET 3.5 CLR mscorlib بدلاً من .NET 4.0.

يمكن إصلاح ذلك عن طريق إدراج المسار إلى التجميع ذي الصلة بشكل صريح:

> ccrewrite /o:rewrittendummy.exe dummy.exe 
  /libpaths:%SystemRoot%\Microsoft.Net\Framework\v4.0.20506
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top