2010-11-30 20 views
3

それが正常にコンパイル:.NET Framework(3.5)の同じバージョンをターゲットにしていても、私のプロジェクトはMSBuild 4でビルドされますが、MSBuild 3.5ではビルドされません。私は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:からMSBuild.exe MySolution.sln \ \ WINDOWS \ Microsoft.NET \ Frameworkの\のV3.5

エラーCS1501:メソッドの過負荷は、 'InitializeClientContextFromStringSid' '2' の引数

取り

エラーCS1501:メソッド「GetRoles」の過負荷は、私が手にエラーが承認マネージャ(のAzMan)に関連している「0」引数

をとります。

最初のエラーのメソッド 'InitializeClientContextFromStringSid'は、Microsoft.Interop.Security.AzRolesのメンバーであるパブリックインターフェイスIAzApplicationに属します。

2番目のエラーのメソッド 'GetRoles'は、Microsoft.Interop.Security.AzRolesのメンバーでもあるパブリックインターフェイスIAzClientContextに属します。

私は、次のようにメソッドを使用しています:

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

可変部材は、ユーザからのWindowsのActive Directory SIDを含む文字列であると_azApplicationはタイプIAzApplicationのです。 CLIENTCONTEXTタイプIAzClientContextである

clientContext.GetRoles()

同じバージョンの.NET Framework(3.5)をターゲットにしていても、自分のソリューションはMSBuild 4でビルドされますが、MSBuild 3.5ではビルドされないのはなぜですか?

答えて

6

InitializeClientContextFromStringSidは、仕様にオプションのパラメータがあります。 .NET Framework 4.0のMSBuildは、C#でオプションのパラメータを使用することをサポートしていますが、関数呼び出しから除外できるようにしていますが、以前のバージョンのMSBuildではこのアプローチをサポートしていません。したがって、古いバージョンのフレームワークでビルドするときにパラメータが使用されていなくても、パラメータを指定する必要があります。

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

GetRolesメソッドでも同じ問題が発生しています。

私はMSBuild 4.0とターゲット3を使用してビルドできる理由を理解しています。5 Frameworkは、CLRがすでにオプションパラメータの使用をサポートしていることです。たとえば、VB.NETは常にそれらをサポートしています。しかし、MSBuild 3.5を使用している場合、C#のオプションパラメータのサポートを許可しなかった古いルール/仕様が使用されるため、ビルドエラーが発生します。

+0

こんにちはゴロンモン、私を助けてくれてありがとう。しかし、問題は.NET 4.0を使用していないことです。どちらの場合も.NET 3.5を使用しています。 – macrobug

+1

4.0の下でMSBuildを使用している場合は、その仕様のもとでコンパイルします。これらの2つの関数のオプションパラメータにダミー変数を使用し、3.5バージョンのMSBuildを使用してコンパイルするかどうかを確認してください。 – Goronmon

+0

はい、コンパイルされます。しかし、ターゲットフレームワークが3.5に設定されている場合は、私が使用するMSBuildのバージョンによって異なる動作をします。私はそれが私が使用しているMSBuildのバージョンに関係なく正確にコンパイルすると思った。私が紛失しているものがない限り。 – macrobug

関連する問題