Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何引用API的两个版本?_C#_Sharepoint_Reference_Sharepoint Api - Fatal编程技术网

C# 如何引用API的两个版本?

C# 如何引用API的两个版本?,c#,sharepoint,reference,sharepoint-api,C#,Sharepoint,Reference,Sharepoint Api,我需要引用两个不同版本的Sharepoint API dll。我有一个需要在Sharepoint 2和Sharepoint 3下运行的Web服务,但也需要使用Sharepoint 3 API提供的新功能(签出和内容批准) 实现这一点的最佳方法是什么?我目前倾向于有两个项目,两个项目之间共享单个文件中的代码,并使用条件编译编译代码的各个部分 有更好的办法吗 谢谢 马特你可以试试“外部别名” 这是VB后期绑定(option strict off)方法运行良好的时候之一。在C#4.0和dynamic上

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

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

有更好的办法吗

谢谢

马特

你可以试试“外部别名”

这是VB后期绑定(option strict off)方法运行良好的时候之一。在C#4.0和
dynamic
上滚动

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


在你全神贯注之前,试着用一种单一的方法。。。除非你知道它适用于最简单的方法,否则不要做所有的事情。

这就是我如何写出针对WSSv2 API编译的.NET 1.1版本和针对WSSv3汇编编译的.NET 2.0版本。它将适用于VS2005和2008

您将需要使用MSBEE

一些提示 打开*.csproj,找出引用SharePoint dll的位置,并更改为类似的内容,根据您的目标更改引用的程序集(FX1_1表示您的目标是.NET1.1,因此是WSSv2)

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

您还需要掌握一些MSBUILD ninja操作,以保持一步构建过程并保持头脑清醒。使用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>

您能否添加一些关于后期绑定选项如何工作的额外说明?试着看看这是否能解决我的一个问题,但@Ryan发布的答案不起作用。
#if FX1_1  
    // WSSv2 specific code  
#else  
    // WSSv3 specific code  
#endif
<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>