如何引用两个版本的API?

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

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

有没有更好的办法 ?

谢谢

马特

这就是我如何吐出针对WSSv2 API和针对WSSv3程序集编译的.NET 2.0编译的.NET 1.1版本。 它适用于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)

 pathto\WSS3\Microsoft.SharePoint.dll pathto\WSS2\Microsoft.SharePoint.dll  

必要时使用条件编译来区分差异

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

如果您遇到编译器错误但代码看起来正确,则可能是该错误仅适用于.NET1.1 / WSSv2并且在.NET2 / WSSv3中编译良好。 检查输出选项卡以查看发生错误的目标

您还需要掌握一些MSBUILD忍者动作以保持一步构建过程并保持自己的健康http://brennan.offwhite.net/blog/2006/11/30/7-steps-to-msbuild/使用MSBUILD你可以让VS同时编译两个版本而无需使用命令行。

这将在.NET完成后运行.NET1.1编译,并将一些消息输出到“输出”窗口,以帮助您确定发生错误的位置。

        

你可以给一个“外部别名”。

这是VB后期绑定(选项严格关闭)方法运行良好的时候之一。 滚动C#4.0并dynamic

您可以尝试为所需的位编写接口(在基础库中),并编写2个dll:一个引用sharepoint dll的每个版本。 对于这两个项目,实现接口(对于您不能执行的操作抛出NotSupportedException ),并在运行时加载相应的dll? (工厂方法)

在你过于专注之前,只需用一种方法尝试它……除非你知道它适用于最简单的方法,否则不要做整件事。