يبني مشروعي مع MSBuild 4 ولكن ليس مع MSBuild 3.5 على الرغم من أنني أستهدف نفس الإصدار من .NET Framework (3.5)؟

StackOverflow https://stackoverflow.com/questions/4315057

  •  29-09-2019
  •  | 
  •  

سؤال

عندما أقوم ببناء الحل الخاص بي باستخدام MSBuild 4 ، فإنه يجمع بنجاح:

C: Windows Microsoft.net Framework v4.0.30319 msbuild.exe mysolution.sln

نجح بناء.

0 Warning(s)
0 Error(s)

ولكن عندما أحاول أن أفعل الشيء نفسه باستخدام MSBuild 3.5 أحصل على الخطأ التالي ، على الرغم من أن المصدر هو نفسه وأنا أستخدم نفس المكتبات ونفس الإصدار من إطار .NET.

C: Windows Microsoft.net Framework V3.5 msbuild.exe mysolution.sln

خطأ CS1501: لا يوجد حمولة زائدة للطريقة "initializeClientContextFromStringsid" تأخذ "2" وسيطات "2"

خطأ CS1501: لا يوجد تحميل زائد للطريقة "getRoles" يأخذ وسيطات "0"

يرتبط الخطأ الذي أحصل عليه بمدير التفويض (Azman).

تنتمي طريقة "initializeClientContextFromStringsId" في الخطأ الأول إلى الواجهة العامة iazapplication ، وهو عضو في microsoft.interop.security.azroles.

تنتمي طريقة "getRoles" في الخطأ الثاني إلى الواجهة العامة iazclientContext ، وهو أيضًا عضو في Microsoft.Interop.security.azroles.

أنا أستخدم الطرق بالطريقة التالية:

var clientContext = _azApplication.InitializeClientContextFromStringSid(member, 0);

عندما يكون العضو المتغير عبارة عن سلسلة تحتوي على Windows Active Directory SID من مستخدم و _azapplication من النوع iazapplication.

clientContext.GetRoles()

حيث يكون ClientContext من النوع iazclientContext.

لماذا يبني حل مع MSBuild 4 ولكن ليس مع MSBuild 3.5 على الرغم من أنني أستهدف نفس الإصدار من إطار .NET (3.5)؟

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

المحلول

يبدو InitializeClientContextFromStringSid لديه معلمة اختيارية في المواصفات. على الرغم من أن MSBUILD في .NET Framework 4.0 يدعم استخدام المعلمات الاختيارية في C# من خلال السماح لك بتركها من مكالمة الوظيفة ، فإن الإصدارات السابقة من MSBuild لا تدعم هذا النهج. لذلك يجب عليك توفير المعلمة حتى لو لم يتم استخدامها عند بناء إصدار أقدم من الإطار.

HRESULT InitializeClientContextFromStringSid(
  [in]            BSTR SidString,
  [in]            LONG lOptions,
  [in, optional]  VARIANT varReserved,
  [out]           IAzClientContext **ppClientContext
);

نفس المشكلة تحدث مع GetRolesطريقة.

من فهمي ، فإن السبب في أنه يمكنك بناء إصدار 4.0 من MSBuild و Target 3.5 هو أن CLR دعم بالفعل استخدام المعلمات الاختيارية ، على سبيل المثال ، دعمها VB.NET دائمًا. ومع ذلك ، عند استخدام MSBuild 3.5 ، فإنه سيستخدم القواعد/المواصفات القديمة التي لم تسمح بدعم المعلمات الاختيارية في C# وبالتالي ستمنحك أخطاء بناء.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top