2011-03-28 7 views
6

Estamos utilizando tlbimp para generar conjuntos de interoperabilidad. Nos gustaría sellar los ensamblados de interoperabilidad con una Versión de archivo y una Versión de ensamblaje. Sin embargo, la opción/asmversion en tlbimp parece establecer ambos valores en el mismo valor.¿Cómo se puede usar tlbimp para especificar diferentes versiones de archivos y ensamblajes?

¿Alguien sabe cómo configurar diferentes versiones de archivos y ensamblajes en un ensamblado de interoperabilidad con tlbimp?

+0

Una gran pregunta, pero ¿por qué exactamente necesitas esta habilidad? – sharptooth

+0

Queremos mantener la misma versión de ensamblaje entre lanzamientos (porque el nuevo ensamblaje sigue siendo compatible con los clientes existentes), pero nos gustaría que nuestro instalador reemplazara una versión anterior del ensamblado con una nueva (por ejemplo, corrección de errores) (y el instalador usa FileVersion para esto). – dominic

+0

Ya veo, eso es bastante razonable. – sharptooth

Respuesta

5

Al final hemos encontrado un par de enlaces sobre un proyecto llamado tlbimp2 en CodePlex, y compilado nuestra propia versión modificada de tlbimp2:

  1. http://clrinterop.codeplex.com/discussions/208832
  2. http://clrinterop.codeplex.com/SourceControl/changeset/view/39798

que tomaron la código del proyecto tlbimp de 2. y lo modificó en la línea de 1. Hubo un par de problemas que tuvimos que solucionar:

En TlbImp.cs tuve explícitamente a montar el número de versión del archivo del resultado de FileVersionInfo.GetVersionInfo, ya que la propiedad estaba vacía FileVersion:

if (Options.m_strFileVersion == null) 
    { 
     // get the fileversion 
     var versionInfo = 
      FileVersionInfo.GetVersionInfo(Options.m_strTypeLibName); 
     Options.m_strFileVersion = 
      versionInfo.FileMajorPart 
      + "." + versionInfo.FileMinorPart 
      + "." + versionInfo.FileBuildPart 
      + "." + versionInfo.FilePrivatePart; 
    } 

En tlbimpcode.cs que tenía que cambiar:

AsmBldr.DefineVersionInfoResource(
    strProduct, 
    strProductVersion, 
    strCompany, 
    strCopyright, 
    strTrademark); 

a:

AsmBldr.DefineVersionInfoResource(); 
no se utilizarían los recursos personalizados

O.

Espero que esto ayude a alguien más con el mismo problema.

1

Parece bastante improbable que pueda hacer esto solo con tlbimp. Probablemente tendrás que meterse con el IL. Tendrá que añadir algo a lo largo de las líneas de:

.custom instance void [mscorlib]System.Reflection.AssemblyFileVersionAttribute::.ctor(string) = (01 00 0B 33 2E 35 2E 35 30 32 31 31 2E 31 00 00) // ...3.5.50211.1.. 

El formato es 01 NN NN SS1 ... SSN 00 00.

NN NN es la longitud de la cadena, SS comprende los bytes ascii que representan la versión.

Cuestiones relacionadas