licensing build-automation infragistics emptylicenseslicx licenseslicx

licensing - Componentes de infragística en el servidor de compilación



build-automation infragistics (5)

He "heredado" un nuevo (¿viejo?) Proyecto de Winforms y me gustaría ponerlo en nuestro servidor de compilación (Bamboo). Ese servidor de compilación tiene solo el mínimo absoluto (.NET 3.5 y no mucho más) instalado, y nos gustaría que siga siendo así.

Como primer paso, extraje todos los archivos de ensamblaje (* .dll) de los componentes de Infragistics en un directorio separado y los referenciaré desde ese directorio local (en lugar de confiar en que se instalen en el GAC). Funciona bien

Pero cuando intento ejecutar esta compilación en Bamboo (usando MSBuild), sigo recibiendo errores:

Propiedades / licenses.licx (1): LC0004 de error: Excepción creación de tipo ''Infragistics.Win.UltraWinToolbars.UltraToolbarsManager, Infragistics2.Win.UltraWinToolbars.v7.2, versión = 7.2.20072.61, Culture = neutral, PublicKeyToken = 7dd5c3163f2cd0cb'' Sistema .ComponentModel.LicenseException

Después de un poco de googlear, parece que los archivos licenses.licx en los proyectos son una especie de esquema de licencia para evitar que las herramientas se instalen en varias máquinas.

Pero, ¿cómo puedo deshacerme de ellos para que mi compilación del servidor de compilación funcione sin instalar el conjunto completo de componentes de Infragística en el servidor de compilación (esto NO es una opción)?

  • si simplemente los elimino de los proyectos, la compilación podría funcionar (aún no lo he intentado), pero luego mi experiencia en el tiempo de diseño sufrirá / no funcionará (¿cuál de los dos?)
  • tener los archivos alrededor para que mi experiencia en el tiempo de diseño funcione impida que la compilación automática se ejecute a través de ...

Hmmm ... clásico catch-22 - ¿alguna forma de salir de esto?


La única manera que encontré para resolver este problema es la siguiente:

  • crear un archivo de licenses.licx absolutamente vacío (0 bytes de longitud) en mi carpeta donde reside la solución
  • Durante las etapas iniciales de la compilación, la fuente se extrae de mi repositorio de fuentes.
  • Cuando llegue el momento, justo antes de que comience la compilación, copio este licenses.licx vacío sobre todos los licenses.licx existentes en el directorio de Properties los distintos proyectos Properties

Con esto, ahora tengo tanto mi experiencia interactiva trabajando (ya que están presentes los archivos correspondientes de license.licx), pero mi compilación automática tampoco se rompe (ya que el archivo de licenses.licx vacío que copié sobre todos los reales no causar cualquier aborto en la construcción)

Parece un poco hackish, pero funciona. Espero que ayude a alguien, en algún lugar, algún día.

Actualización: agregué este paso BeforeBuild a mi archivo de compilación de MSBuild para copiar el archivo *.licx vacío a las ubicaciones que necesito:

<Target Name="BeforeBuild"> <CreateItem Include="licenses.licx"> <Output TaskParameter="Include" ItemName="EmptyLicensesLicx" /> </CreateItem> <Copy SourceFiles="@(EmptyLicensesLicx)" DestinationFolder="(your-target-folder-here)" ContinueOnError="true" /> </Target>

Como necesito reemplazar este archivo * .licx en varios lugares, en realidad tengo varias de esas tareas <Copy> para lograr mi objetivo.


Me encontré con este problema recientemente usando TeamCity 9.1 como mi servidor de compilación.

Cuando configuramos originalmente el servidor de compilación, no queríamos instalar Infragistics en la máquina, por lo que creamos una carpeta de Referencias donde copiamos los ensamblajes necesarios y los registramos. (Sé que esto no es deseable pero es una solución alternativa) .)

Asegúrese de que los proyectos hagan referencia a los ensamblajes en la nueva ruta. Esto crea una entrada HintPath en el (los) archivo (s) de proyecto para cada ensamblaje.

Finalmente, edite el archivo del proyecto manualmente para agregar <Private> True </Private> a cada referencia. (No fue suficiente establecer la propiedad Copiar local en verdadero).


Para complementar las respuestas anteriores (es decir, resolver el problema creando un archivo EmptyLicensesLicx vacío), puede instalar el paquete EmptyLicensesLicx EmptyLicensesLicx, y generará un Licenses.licx vacío en su proyecto, antes de que se compile cada vez (que es Todo lo que necesitas para que funcione.


Podría crear un proyecto de Team City basado en la respuesta de es decir, reemplazando el archivo de licencia existente con licencias en .

Pero hubo otro problema cuando intenté abrir páginas aspx con controles de infragística en la máquina local, da error, ya que tengo la infragística instalada en la máquina local, pero mi licencias.licx está en blanco.

He encontrado una solución para esto como a continuación:

  • Creó una nueva configuración en Visual Studio específicamente para construir proyectos en Team City.

<Target Name="BeforeBuild" Condition="$(Configuration)==CI_TeamCity_Build"> <CreateItem Include="$(MSBuildProjectDirectory)/licenses.licx"> <Output TaskParameter="Include" ItemName="EmptyLicensesLicx" /> </CreateItem> <Copy SourceFiles="@(EmptyLicensesLicx)" DestinationFolder="$(MSBuildProjectDirectory)/Properties/" ContinueOnError="true" /> </Target>

  • Se agregó el objetivo ''BeforeBuild'' como lo mencionó marc_s. Además, he agregado la condición de que esta tarea se ejecutará cuando mi compilación use ''CI_TeamCity_Build'' y no para ''Debug'' o ''Release'' build

  • La configuración de construcción de Team City está utilizando la configuración anterior en el paso "VS Solution Build Runner". Debido al destino ''BeforeBuild'' en el archivo csproj, reemplaza el archivo de licencia con uno en blanco y la compilación se realiza correctamente.

  • En mi máquina local, continúo usando la compilación ''Depurar'' o ''Liberar'' ya que no reemplazará el archivo licencias.licx con uno en blanco. Todos los controles de infragística aparecen en la página .aspx sin ningún problema.


Tenemos componentes de otra compañía, pero el enfoque debería funcionar si el modelo de licencia .Net se utiliza en una biblioteca de terceros.

Si tiene el archivo licenses.licx , entonces la biblioteca probablemente usa el modelo de licencia .Net . Durante el proceso de compilación, utiliza la utilidad lc.exe para compilar el archivo de licencias binarias y luego se incluye en el ensamblaje como recurso incrustado.

Qué necesitas hacer:

  1. Genere el archivo YourApp.exe.licenses utilizando lc.exe. Otra forma es compilar la solución que contiene licenses.licx y obtenerla del directorio obj/Debug u obj/Release . Este paso se debe realizar en la máquina donde los componentes están instalados y registrados. También puede requerir ingresar el código de licencia como en nuestro caso.
  2. Excluir licencias.licx del proyecto.
  3. Agregue YourApp.exe.licenses al proyecto como recurso incrustado.
  4. Abra .csproj de su aplicación y edite la entrada para el archivo YourApp.exe.licenses . Tendrá algo como esto <EmbeddedResource Include="YourApp.exe.licenses" /> Se debe cambiar a

    <EmbeddedResource Include="YourApp.exe.licenses" > <LogicalName>YourApp.exe.licenses</LogicalName> </EmbeddedResource>

    Esto es necesario para excluir el espacio de nombres del nombre del recurso.

  5. Construir - Comprobar - Cometer.

No estoy seguro de cómo funciona el archivo lc.exe pero probablemente necesitará reconstruir el archivo YourApp.exe.licenses de vez en cuando.