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