Pregunta

Estoy tratando de obtener la construcción del equipo de TFS para construir de manera confiable una aplicación WPF C #. Esta aplicación se basa en una vb6lib.dll que mantenemos, este propio VB6lib.dll se basa en otros C # libs que también mantenemos.

He establecido una definición de compilación para construir (en orden):

  • vbdependences.sln (todas las libs en esto tienen conjunto de interopes de com, así, el VB6 puede encontrar su TLBS)
  • buildvb6lib.proj (un archivo MSBUILD que llama "vb6.exe / make / d" para hacer el vblib.dll en el servidor de compilación, como parte de esta script que he estado copiando la salida vb6lib.dll a C: \ tmp)
  • mainapp.sln (en mi espacio de trabajo, he agregado una referencia a c: \ tmp \ vb6lib.dll)

¿Esto suena bien? ? En mi computadora portátil, generalmente creo el VB6, copie su salida a \ TMP y luego REGSVR32 allí antes de agregar una referencia en mi solución C #. Es este paso que no estoy convencido de que mi construcción defra.

Además, ¿hay una manera de obtener una salida más útil de la compilación VB6, actualmente obtengo "Error de compilación en el archivo 'XXX.BAS' puede 'encontrar proyecto de la biblioteca", pero no qué biblioteca real no puede encontrar .

vítores

¿Fue útil?

Solución

Usted tiene razón en que el punto crítico en su proceso de compilación en el sistema de desarrollo radica en registrar el objeto COM.Sin embargo, uno no tiene en general registrar el objeto COM en el servidor de compilación, ya que esto puede causar todo tipo de problemas de versiones y fallas silenciosas cuando se registra el objeto COM incorrecto o que falla el registro.

La forma adecuada de lograr esto es generar un conjunto de interoperación manualmente y hacer referencia a que en lugar del objeto COM.Esto se logra con la utilidad Tlbimp, por ejemplo:

tlbimp ..\Libraries\VBLib.dll /out:..\Libraries\Interop.VBLib.dll

Ejecute ese comando en su sistema de desarrollo, luego retire la referencia a vb6lib.dll y agregue una referencia a interop.vblib.dll.Luego, puede agregar el comando Tlbimp como un evento de prebuild en el proyecto de referencia, de modo que el ensamblaje de INTERPOP esté siempre construido desde la versión correcta, y nunca más necesitará tener su objeto COM registrado en el sistema de compilación.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top