我的项目使用 MSBuild 4 构建,但不是使用 MSBuild 3.5,即使我的目标是相同版本的 .NET Framework (3.5)?

2023-12-22

当我使用 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);

其中变量成员是包含用户的 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 不支持此方法。因此,即使在使用旧版本的框架构建时未使用该参数,您也必须提供该参数。

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

同样的问题也发生在GetRolesmethod.

根据我的理解,您可以使用 4.0 版本的 MSBuild 和目标 3.5 Framework 进行构建的原因是 CLR 已经支持使用可选参数,例如 VB.NET 一直支持它们。但是,当使用 MSBuild 3.5 时,它将使用旧的规则/规范,该规则/规范不允许支持 C# 中的可选参数,因此会出现构建错误。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我的项目使用 MSBuild 4 构建,但不是使用 MSBuild 3.5,即使我的目标是相同版本的 .NET Framework (3.5)? 的相关文章

随机推荐