لماذا لا يقوم ccrewrite.exe بأي شيء من سطر الأوامر؟
-
05-07-2019 - |
سؤال
لدي عقود التعليمات البرمجية تعمل بشكل جيد من داخل 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