c# - 如何引用一个API的两个版本?

标签 c# sharepoint reference sharepoint-api

我需要引用两个不同版本的 Sharepoint API dll。我有一个网络服务需要在 Sharepoint 2 和 Sharepoint 3 下运行,但也需要使用 Sharepoint 3 API 提供的新功能(结帐和内容批准)

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

有没有更好的办法?

谢谢

马特

最佳答案

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

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

Working with .NET 1.1 with Visual Studio 2008

一些技巧

打开 *.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 忍者 Action ,以保持 1 步构建过程并保持清醒 http://brennan.offwhite.net/blog/2006/11/30/7-steps-to-msbuild/使用 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>

关于c# - 如何引用一个API的两个版本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/286826/

相关文章:

c# - 错误 : TF400534 : Package (tfs_sharePointInstaller) caching failed with the following status : 0x80096010

sharepoint - 我可以在 SharePoint 2007 中使用 .NET 4 吗?

sharepoint - SharePoint Online-默认情况下启用网站功能

java - 检查 2 个不同的相等实例(包含示例)

c# - 拒绝访问任何文件夹,C#

c# - 此 LINQ JOIN 是否存在某种语法错误?

c# - 命名空间 "Interaction"中不存在名称 "http://schemas.microsoft.com/expression/2010/interactivity"

c# - 如何限制 SSH.NET 的上传速度?

reference - Rust 中是否复制了引用值?

c++ - 内存管理 : scope and local pointer variable