Как ссылаться на две версии API? - PullRequest
7 голосов
/ 13 ноября 2008

Мне нужно сослаться на две разные версии DLL Sharepoint API. У меня есть веб-сервис, который должен работать как под Sharepoint 2, так и под Sharepoint 3, но также должен работать с новыми функциями, предоставляемыми API Sharepoint 3 (Checkout и Content Approval)

Каков наилучший способ добиться этого - в настоящее время я склоняюсь к тому, чтобы иметь два проекта с кодом в одном файле, который будет разделен между двумя различными разделами кода, скомпилированными с использованием условной компиляции.

Есть ли лучший способ?

Спасибо

Мэтт

Ответы [ 2 ]

3 голосов
/ 13 ноября 2008

Вот как я выплюнул версии .NET 1.1, скомпилированные с использованием WSSv2 API, и .NET 2.0, скомпилированные с использованием сборки WSSv3. Это будет работать для VS 2005 и 2008.

Вам нужно будет использовать MSBEE http://www.codeplex.com/Wiki/View.aspx?ProjectName=MSBee

Работа с .NET 1.1 с Visual Studio 2008

Несколько советов

Откройте * .csproj и выясните, где указана DLL-библиотека SharePoint, и измените ее на что-то подобное, что меняет ссылочную сборку в зависимости от вашей цели (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, чтобы сохранить процесс сборки в 1 шаг и сохранить себя в здравом уме. http://brennan.offwhite.net/blog/2006/11/30/7-steps-to-msbuild/ Используя MSBUILD, вы можете заставить VS компилировать обе версии одновременно, не прибегая к командной строке. .

Это запустит компиляцию .NET1.1 после завершения .NET и выведет некоторые сообщения в окно вывода, чтобы помочь вам определить, где произошли ошибки.

<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>
2 голосов
/ 13 ноября 2008

Вы можете попробовать "внешний псевдоним".

Это один из тех случаев, когда подход позднего связывания VB (опция строго выключен) работает хорошо. Ролл на C # 4.0 и dynamic.

Вы можете попробовать написать интерфейс для нужных вам битов (в базовой библиотеке) и написать 2 dll: по одной, ссылаясь на каждую версию dll sharepoint. Для обоих проектов реализовать интерфейс (выбрасывая NotSupportedException для битов, которые вы не можете сделать), и загрузить соответствующую DLL во время выполнения? (заводской подход)

Просто попробуйте один метод, прежде чем вы будете слишком поглощены ... не делайте все это, пока вы не знаете, что это работает для самых простых простых методов.

...