Мой проект собирается с MSBuild 4, но не с MSBuild 3.5, хотя я нацеливаюсь на ту же версию .NET Framework (3.5)? - PullRequest
3 голосов
/ 30 ноября 2010

Когда я создаю свое решение с использованием MSBuild 4, оно успешно компилируется:

C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ MSBuild.exe MySolution.sln

Сборка прошла успешно.

0 Warning(s)
0 Error(s)

Но когда я пытаюсь сделать то же самое с помощью MSBuild 3.5, я получаю следующую ошибку, даже если источник тот же, и я используюте же библиотеки и та же версия .NET Framework.

C: \ Windows \ Microsoft.NET \ Framework \ v3.5 \ MSBuild.exe MySolution.sln

ошибка CS1501: нет перегрузки для метода 'InitializeClientContextFromStringSid' принимает аргументы '2'

ошибка CS1501: нет перегрузки для метода 'GetRoles' принимает аргументы '0'

Полученная ошибка связана с диспетчером авторизации (AzMan).

Метод 'InitializeClientContextFromStringSid' в первой ошибке принадлежит общедоступному интерфейсу IAzApplication, члену Microsoft.Interop.Security.AzRoles.

метод 'GetRoles 'во второй ошибке принадлежит общедоступному интерфейсу IAzClientContext, также члену Microsoft.Interop.Security.AzRoles.

Я использую методы следующим образом:

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

, где переменная-член - это строка, содержащая SID Windows Active Directory от пользователя, а _azApplication имеет тип IAzApplication.

clientContext.GetRoles()

, где clientContext имеет тип IAzClientContext.

Почему мое решение строится с MSBuild 4, а не с MSBuild 3.5, хотя я нацеливаюсь на ту же версию .NET Framework (3.5)?

1 Ответ

6 голосов
/ 30 ноября 2010

Похоже, InitializeClientContextFromStringSid имеет необязательный параметр в спецификации. Хотя MSBuild в .Net Framework 4.0 поддерживает использование необязательных параметров в C #, позволяя вам исключить их из вызова функции, предыдущие версии MSBuild не поддерживают этот подход. Таким образом, вы должны предоставить параметр, даже если он не используется при сборке с более старой версией Framework.

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

Та же проблема возникает с методом GetRoles.

Насколько я понимаю, причина, по которой вы можете строить с использованием версии MSBuild 4.0 и target 3.5 Framework, заключается в том, что CLR уже поддерживает использование дополнительных параметров, например, VB.NET всегда поддерживает их. Однако при использовании MSBuild 3.5 он будет использовать более старые правила / спецификации, которые не допускали поддержку необязательных параметров в C # и, таким образом, приведут к ошибкам сборки.

...