mac*_*bug 3 msbuild azman msbuild-4.0
当我使用MSBuild 4构建我的解决方案时,它成功编译:
C:\ Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe MySolution.sln
构建成功.
Run Code Online (Sandbox Code Playgroud)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);
其中变量成员是包含来自用户的Windows Active Directory SID的字符串,_azApplication的类型为IAzApplication.
clientContext.GetRoles()
其中clientContext的类型为IAzClientContext.
为什么我的解决方案使用MSBuild 4而不是MSBuild 3.5构建,即使我的目标是相同版本的.NET Framework(3.5)?
看起来InitializeClientContextFromStringSid在规范中有一个可选参数.虽然.Net Framework 4.0中的MSBuild支持在C#中使用可选参数,允许您将它们从函数调用中移除,但以前版本的MSBuild不支持此方法.因此,即使在使用旧版本的Framework构建时未使用参数,也必须提供参数.
HRESULT InitializeClientContextFromStringSid(
[in] BSTR SidString,
[in] LONG lOptions,
[in, optional] VARIANT varReserved,
[out] IAzClientContext **ppClientContext
);
Run Code Online (Sandbox Code Playgroud)
该GetRoles方法也发生了同样的问题.
根据我的理解,您可以使用4.0版本的MSBuild和目标3.5 Framework构建的原因是CLR已经支持使用Optional参数,例如VB.NET始终支持它们.但是,在使用MSBuild 3.5时,它将使用不允许在C#中支持Optional参数的旧规则/规范,从而为您提供构建错误.
| 归档时间: |
|
| 查看次数: |
1149 次 |
| 最近记录: |