3

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」引数を取りません

発生するエラーは、Authorization Manager(AzMan)に関連しています。

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

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

私は次の方法でメソッドを使用しています:

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

ここで、変数memberは、ユーザーからのWindows Active Directory SIDを含む文字列であり、_azApplicationはタイプIAzApplicationです。

clientContext.GetRoles()

ここで、clientContextのタイプはIAzClientContextです。

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

4

1 に答える 1

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ます。

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

于 2010-11-30T15:09:52.897 に答える