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

发布于 2024-10-05 04:34:48 字数 1185 浏览 7 评论 0原文

当我使用 MSBuild 4 构建解决方案时,它编译成功:

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

构建成功。

0 警告
0 错误

但是,当我尝试使用 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);

其中变量 member 是包含来自用户的 Windows Active Directory SID 的字符串,并且 _azApplication 的类型为IAz应用程序。

clientContext.GetRoles()

其中 clientContext 的类型为 IAzClientContext。

为什么我的解决方案是使用 MSBuild 4 构建的,而不是使用 MSBuild 3.5 构建的,即使我的目标是相同版本的 .NET Framework (3.5)?

When I build my solution using MSBuild 4 it compiles successfully:

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

Build succeeded.

0 Warning(s)
0 Error(s)

But when I try to do the same using MSBuild 3.5 I get the following error, even though the source is the same and I am using the same libraries and the same version of the .NET Framework.

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

error CS1501: No overload for method 'InitializeClientContextFromStringSid' takes '2' arguments

error CS1501: No overload for method 'GetRoles' takes '0' arguments

The error that I get is related to Authorization Manager (AzMan).

The method 'InitializeClientContextFromStringSid' in the first error belongs to the public interface IAzApplication, a member of Microsoft.Interop.Security.AzRoles.

The method 'GetRoles' in the second error belongs to the public interface IAzClientContext, also a member of Microsoft.Interop.Security.AzRoles.

I am using the methods in the following way:

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

where the variable member is a string containing the Windows Active Directory SID from an user and _azApplication is of type IAzApplication.

clientContext.GetRoles()

where clientContext is of type IAzClientContext.

Why does my solution builds with MSBuild 4 but not with MSBuild 3.5 even though I'm targeting the same version of the .NET Framework (3.5)?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

陈甜 2024-10-12 04:34:48

看起来 InitializeClientContextFromStringSid 在规范中有一个可选参数。尽管 .Net Framework 4.0 中的 MSBuild 支持在 C# 中使用可选参数(允许您将可选参数排除在函数调用之外),但早期版本的 MSBuild 不支持此方法。因此,即使在使用旧版本的框架构建时未使用该参数,您也必须提供该参数。

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

GetRoles 方法也会出现同样的问题。

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

It looks like InitializeClientContextFromStringSid has an optional parameter in the specification. Though MSBuild in .Net Framework 4.0 supports the use of optional parameters in C# by allowing you to leave them out of the function call, previous versions of the MSBuild do not support this approach. So you must to supply the parameter even if it's not being used when building with older version of the Framework.

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

The same issue is happening with the GetRolesmethod.

From my understanding, the reason you can build using the 4.0 version of MSBuild and target 3.5 Framework is that the CLR already supported the use of Optional parameters, for example VB.NET has always supported them. However, when using MSBuild 3.5, it is going to use the older rules/specification that did not allow support for Optional parameters in C# and thus will give you build errors.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文