gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 16:03:24 25 4
gpt4 key购买 nike

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

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

Build succeeded.

0 Warning(s)
0 Error(s)

但是当我尝试使用 MSBuild 3.5 执行相同操作时,我收到以下错误,即使源相同并且我使用相同的库和相同版本的 .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

我收到的错误与授权管理器 (AzMan) 有关。

第一个错误中的方法“InitializeClientContextFromStringSid”属于公共(public)接口(interface) IAzApplication,它是 Microsoft.Interop.Security.AzRoles 的成员。

第二个错误中的“GetRoles”方法属于公共(public)接口(interface) 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
);

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

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

关于msbuild - 我的项目使用 MSBuild 4 构建,但不是使用 MSBuild 3.5,即使我的目标是相同版本的 .NET Framework (3.5)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4315057/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com