7

Sharepoint API dll の 2 つの異なるバージョンを参照する必要があります。Sharepoint 2 と Sharepoint 3 の両方で実行する必要がある Web サービスがありますが、Sharepoint 3 API (チェックアウトとコンテンツの承認) によって提供される新機能も使用する必要があります。

これを達成する最善の方法は何ですか - 私は現在、条件付きコンパイルを使用してコンパイルされたコードのさまざまなセクションを使用して、1 つのファイル内のコードを 2 つのプロジェクト間で共有する 2 つのプロジェクトを持つことに傾いています。

より良い方法はありますか?

ありがとう

マット

4

2 に答える 2

3

これが、WSSv2APIに対してコンパイルされた.NET1.1バージョンとWSSv3アセンブリに対してコンパイルされた.NET2.0を吐き出す方法です。VS2005および2008で機能します。

MSBEEhttp ://www.codeplex.com/Wiki/View.aspx? ProjectName= MSBeeを使用する必要があります

VisualStudio2008での.NET1.1の操作

いくつかのヒント

* .csprojを開き、SharePoint dllが参照されている場所を見つけて、ターゲットに応じて参照されるアセンブリを変更する次のようなものに変更します(FX1_1は、.NET1.1、したがってWSSv2をターゲットにしていることを意味します)

<Reference Include="Microsoft.SharePoint">
  <HintPath Condition="'$(TargetFX1_1)'!='true'">pathto\WSS3\Microsoft.SharePoint.dll</HintPath>
  <HintPath Condition="'$(TargetFX1_1)'=='true'">pathto\WSS2\Microsoft.SharePoint.dll</HintPath>
</Reference>

必要に応じて、違いに条件付きコンパイルを使用する

#if FX1_1  
    // WSSv2 specific code  
#else  
    // WSSv3 specific code  
#endif

コンパイラエラーが発生してもコードが正しく表示される場合は、エラーが.NET1.1 / WSSv2のみであり、.NET2/WSSv3で正常にコンパイルされている可能性があります。[出力]タブをチェックして、エラーが発生したターゲットを確認します

また、MSBUILDを使用して、1ステップのビルドプロセスを維持し、正気を保つために、MSBUILD忍者の動きをマスターする必要がありますhttp://brennan.offwhite.net/blog/2006/11/30/7-steps-to-msbuild/コマンドラインに頼ることなく、VSに両方のバージョンを同時にコンパイルさせることができます。

これにより、.NETが終了した後に.NET1.1コンパイルが実行され、エラーが発生した場所を特定するのに役立ついくつかのメッセージが[出力]ウィンドウに出力されます。

<Target Name="BeforeBuild">
    <Message Text="--- Building for .NET 1.1 ---" Importance="high" Condition="'$(TargetFX1_1)'=='true'" />
    <Message Text="--- Building for .NET 2.0 ---" Importance="high" Condition="'$(TargetFX1_1)'!='true'" />
</Target>
<Target Name="AfterBuild" Condition="'$(TargetFX1_1)'!='true'">
    <MSBuild Projects="$(MSBuildProjectFile)" Properties="TargetFX1_1=true;" />
</Target>
于 2008-11-13T15:22:46.983 に答える
2

「外部エイリアス」を試すことができます。

これは、VB レイト バインディング (オプション strict off) アプローチがうまく機能するときの 1 つです。C# 4.0 とdynamic.

必要なビットのインターフェイスを (ベース ライブラリに) 記述してみて、2 つの dll を記述してみてください。1 つは sharepoint dll の各バージョンを参照します。両方のプロジェクトで、インターフェイスを実装し (NotSupportedException実行できないビットをスローします)、実行時に適切な dll をロードしますか? (ファクトリーアプローチ)

夢中になる前に、1 つの方法で試してみてください...最も単純な方法で機能することがわかるまで、すべてを実行しないでください。

于 2008-11-13T12:53:18.860 に答える