如何引用两个版本的API?

Mat*_*att 7 c# sharepoint reference sharepoint-api

我需要引用两个不同版本的Sharepoint API dll.我有一个需要在Sharepoint 2和Sharepoint 3下运行的Web服务,但还需要使用Sharepoint 3 API提供的新功能(Checkout和内容审批)

实现这一目标的最佳方法是什么 - 我目前倾向于拥有两个项目,两个项目之间的代码在一个文件中共享,并使用条件编译编译代码的各个部分.

有没有更好的办法 ?

谢谢

马特

Rya*_*yan 3

这就是我如何吐出针对 WSSv2 API 编译的 .NET 1.1 版本和针对 WSSv3 程序集编译的 .NET 2.0 版本。它适用于 VS 2005 和 2008。

您将需要使用 MSBEE http://www.codeplex.com/Wiki/View.aspx?ProjectName=MSBee

通过 Visual Studio 2008 使用 .NET 1.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>
Run Code Online (Sandbox Code Playgroud)

必要时使用条件编译来解决差异

#if FX1_1  
    // WSSv2 specific code  
#else  
    // WSSv3 specific code  
#endif
Run Code Online (Sandbox Code Playgroud)

如果出现编译器错误,但代码看起来正确,则可能该错误仅适用于 .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>
Run Code Online (Sandbox Code Playgroud)