studio - ¿Mi proyecto se compila con MSBuild 4 pero no con MSBuild 3.5 aunque apunte a la misma versión de.NET Framework(3.5)?
net framework windows 10 (1)
Cuando construyo mi solución usando MSBuild 4, compila con éxito:
C: / Windows / Microsoft.NET / Framework / v4.0.30319 / MSBuild.exe MySolution.sln
Construir exitosamente
0 Warning(s) 0 Error(s)
Pero cuando trato de hacer lo mismo con MSBuild 3.5, aparece el siguiente error, aunque la fuente es la misma y estoy usando las mismas bibliotecas y la misma versión de .NET Framework.
C: / Windows / Microsoft.NET / Framework / v3.5 / MSBuild.exe MySolution.sln
error CS1501: ninguna sobrecarga para el método ''InitializeClientContextFromStringSid'' toma ''2'' argumentos
error CS1501: ninguna sobrecarga para el método ''GetRoles'' toma argumentos ''0''
El error que obtengo está relacionado con el Administrador de Autorizaciones (AzMan).
El método ''InitializeClientContextFromStringSid'' en el primer error pertenece a la interfaz pública IAzApplication, un miembro de Microsoft.Interop.Security.AzRoles.
El método ''GetRoles'' en el segundo error pertenece a la interfaz pública IAzClientContext, también miembro de Microsoft.Interop.Security.AzRoles.
Estoy usando los métodos de la siguiente manera:
var clientContext = _azApplication.InitializeClientContextFromStringSid(member, 0);
donde el miembro variable es una cadena que contiene el SID de Windows Active Directory de un usuario y _azApplication es del tipo IAzApplication.
clientContext.GetRoles()
donde clientContext es de tipo IAzClientContext.
¿Por qué mi solución se compila con MSBuild 4 pero no con MSBuild 3.5 aunque apunte a la misma versión de .NET Framework (3.5)?
Parece que InitializeClientContextFromStringSid
tiene un parámetro opcional en la especificación. Aunque MSBuild en .Net Framework 4.0 admite el uso de parámetros opcionales en C # al permitir que los deje fuera de la llamada de función, las versiones anteriores de MSBuild no son compatibles con este enfoque. Por lo tanto, debe proporcionar el parámetro incluso si no se está utilizando al compilar con una versión anterior del Framework.
HRESULT InitializeClientContextFromStringSid(
[in] BSTR SidString,
[in] LONG lOptions,
[in, optional] VARIANT varReserved,
[out] IAzClientContext **ppClientContext
);
El mismo problema está sucediendo con el método GetRoles
.
Según tengo entendido, la razón por la que puede compilarse utilizando la versión 4.0 de MSBuild y Target Framework 3.5 es que CLR ya admite el uso de parámetros opcionales, por ejemplo, VB.NET siempre los ha soportado. Sin embargo, al usar MSBuild 3.5, usará las reglas / especificaciones más antiguas que no permitieron la compatibilidad con los parámetros opcionales en C # y, por lo tanto, le dará errores de compilación.