c# - tutorial - web api ejemplo
¿Cómo hacer referencia a dos versiones de una API? (2)
Tengo la necesidad de hacer referencia a dos versiones diferentes de la DLL de SharePoint Sharepoint. Tengo un servicio web que necesita ejecutarse tanto en Sharepoint 2 como en Sharepoint 3, pero también necesita trabajar con las nuevas funciones provistas por la API de Sharepoint 3 (Aprobación de pago y aprobación de contenido)
¿Cuál es la mejor manera de lograr esto? Actualmente me estoy inclinando por tener dos proyectos, con el código en un solo archivo compartido entre los dos con varias secciones del código compilado en el uso de la compilación condicional.
¿Hay una mejor manera?
Gracias
Mate
Así es como escupí las versiones de .NET 1.1 compiladas contra WSSv2 API y .NET 2.0 compiladas contra el ensamblaje de WSSv3. Funcionará para VS 2005 y 2008.
Tendrá que usar MSBEE http://www.codeplex.com/Wiki/View.aspx?ProjectName=MSBee
Trabajando con .NET 1.1 con Visual Studio 2008
Algunos consejos
Abra * .csproj y descubra dónde se hace referencia al dll de SharePoint y cambie a algo así que cambie el ensamblado al que se hace referencia según su objetivo (FX1_1 significa que tiene como objetivo .NET1.1 y, por lo tanto, 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>
Use la compilación condicional para las diferencias cuando sea necesario
#if FX1_1
// WSSv2 specific code
#else
// WSSv3 specific code
#endif
Si obtiene un error de compilación pero el código parece correcto, es posible que el error sea solo para .NET1.1 / WSSv2 y compila bien en .NET2 / WSSv3. Compruebe la pestaña de salida para ver para qué objetivo se produjo el error
También necesitarás dominar algunos movimientos ninja de MSBUILD para mantener un proceso de compilación de 1 paso y mantenerte sano http://brennan.offwhite.net/blog/2006/11/30/7-steps-to-msbuild/ usando MSBUILD puede hacer que VS compile ambas versiones al mismo tiempo sin recurrir a la línea de comando.
Esto ejecutará la compilación .NET1.1 después de que .NET haya terminado y envíe algunos mensajes a la ventana de Salida para ayudarlo a determinar dónde ocurrieron los errores.
<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>
Podría dar un "alias externo" una vez.
Este es uno de esos momentos en los que el enfoque de vinculación tardía de VB (opción de estricta desactivación) funciona bien. Roll on C # 4.0 y dynamic
.
Puede intentar escribir una interfaz para los bits que necesita (en una biblioteca base) y escribir 2 dlls: uno haciendo referencia a cada versión del sharepoint dll. Para ambos proyectos, implemente la interfaz (lanzando NotSupportedException
para los bits que no puede hacer) y cargue el dll apropiado en tiempo de ejecución. (enfoque de fábrica)
Solo pruébelo con un solo método antes de que se absorba demasiado ... no lo haga todo hasta que sepa que funciona con los métodos simples más simples.