2010-11-30 59 views
3

當我建立使用的MSBuild 4我的解決方案成功地編譯:我的項目是用MSBuild 4構建的,但是與MSBuild 3.5不同,即使我的目標版本是.NET Framework(3.5)的相同版本?

C:\ WINDOWS \ Microsoft.NET \框架\ v4.0.30319 \ MSBuild.exe MySolution.sln

構建成功。

0 Warning(s) 
0 Error(s) 

但是,當我嘗試做使用的MSBuild 3.5相同的我碰到下面的錯誤,即使源是相同的,我使用的是相同的庫和相同版本的.NET Framework。

C:\ WINDOWS \ Microsoft.NET \框架\ 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);

其中變量構件可從用戶和_azApplication包含Windows活動目錄SID字符串是類型IAzApplication的。

clientContext.GetRoles()

其中clientContext是類型IAzClientContext的。

爲什麼我的解決方案使用MSBuild 4而不是MSBuild 3.5構建,即使我的目標版本是.NET Framework(3.5)的相同版本?

回答

6

看起來像InitializeClientContextFromStringSid在規範中有一個可選參數。雖然.NET Framework 4.0中的MSBuild支持在C#中使用可選參數,但允許您將它們保留在函數調用之外,但以前版本的MSBuild不支持此方法。因此,即使在使用較早版本的Framework構建時沒有使用該參數,您也必須提供該參數。

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

GetRoles方法發生同樣的問題。

從我的理解,你可以使用4.0版本的MSBuild和目標3構建的原因。5框架是CLR已經支持使用可選參數,例如VB.NET一直支持它們。但是,使用MSBuild 3.5時,它將使用不支持C#中可選參數的舊規則/規範,因此會給您構建錯誤。

+0

嗨Goronmon,謝謝你試圖幫助我。但問題是我沒有使用.NET 4.0。我在這兩種情況下都使用.NET 3.5。 – macrobug 2010-11-30 15:20:39

相關問題