La compilación del proyecto SQL CLR falla al usar TFS: no se puede resolver la referencia al ensamblado

Tenemos una solución VS2010 que contiene un proyecto SQL CLR que a su vez tiene una referencia a un ensamblado de terceros que se ha registrado en nuestro servidor de base de datos de desarrollo (a través de un proyecto de base de datos en la solución que tiene un script para registrar el ensamblaje usando CREATE ASSEMBLY de un literal varbinary).

Cuando intentamos ejecutar una compilación a través de TFS, sin embargo, el proyecto CLR no se puede compilar porque no puede ubicar la referencia al ensamblado (mensaje de error a continuación)

ResolveSQLCLRReferences:
  Primary reference "Telerik_Web_UI_RecurrenceEngine".
C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v10.0\TeamData\Microsoft.Data.Schema.SqlClr.targets(147,7): warning MSB3245: Could not resolve this reference. Could not locate the assembly "Telerik_Web_UI_RecurrenceEngine". Check to make sure the assembly exists on disk. If this reference is required by your code, you may get compilation errors. [..]
      For SearchPath "xx\obj\sqlclr".
      Considered "xx\obj\sqlclr\Telerik_Web_UI_RecurrenceEngine.dll", but it didn't exist.
      Considered "xx\obj\sqlclr\Telerik_Web_UI_RecurrenceEngine.exe", but it didn't exist.
ResolveAssemblyReferences:
  Ignoring "Telerik_Web_UI_RecurrenceEngine" because it has a non-empty subtype "SQLCLR".

Al construir / implementar a través de VS, está bien. Noto que tengo el archivo DLL requerido en mi carpeta obj \ sqlcr localmente, que supongo que se genera de alguna manera a partir de la referencia del proyecto al ensamblaje en SQL Server.

¿Necesitamos registrar este archivo para que el servidor de compilación pueda encontrarlo o hay alguna forma de hacer que msbuild se conecte a un servidor de base de datos para resolver la referencia?

¿O deberíamos registrar el ensamblado desde un archivo en el proyecto DB (en lugar de un literal varbinary) y luego hacer que el proyecto CLR haga referencia a eso? (no estoy seguro de cómo, ¿copia manual a la carpeta \ obj \ sqclr tal vez?). ¡Se agradece cualquier orientación!

preguntado el 16 de mayo de 11 a las 17:05

1 Respuestas

Registrar el archivo entre otros archivos del proyecto puede ser una alternativa, pero debe asegurarse de que la referencia del archivo también se pueda encontrar en el servidor de Team Build.

Dado que esta es una dll de biblioteca de terceros, creo que no cambia con frecuencia, por lo que colocar la dll en el GAC del servidor de Team Build también podría funcionar. (... y es una solución mucho más limpia).

Respondido el 07 de junio de 11 a las 18:06

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.