Как использовать tlbimp для указания разных версий файлов и сборок? - PullRequest
9 голосов
/ 28 марта 2011

Мы используем tlbimp для генерации сборок взаимодействия. Мы хотели бы пометить сборки взаимодействия как версией файла, так и версией сборки. Однако параметр / asmversion в tlbimp, похоже, устанавливает оба этих параметра на одно и то же значение.

Кто-нибудь знает, как настроить разные версии файлов и сборок в сборке взаимодействия с помощью tlbimp?

Ответы [ 2 ]

7 голосов
/ 01 апреля 2011

В итоге мы нашли пару ссылок о проекте под названием tlbimp2 в codeplex и скомпилировали нашу собственную модифицированную версию tlbimp2:

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

Я взял код из проекта tlbimp версии 2. и изменил его по принципу 1. Было несколько проблем, с которыми нам пришлось работать:

В TlbImp.cs Я должен был явно собрать номер версии файла из результата FileVersionInfo.GetVersionInfo, поскольку свойство 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;
    }

В tlbimpcode.cs мне пришлось переключиться:

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

до:

 AsmBldr.DefineVersionInfoResource();

В противном случае пользовательские ресурсы не будут использоваться.

Надеюсь, это поможет кому-то еще с такой же проблемой.

1 голос
/ 30 марта 2011

Кажется маловероятным, что вы сможете сделать это, используя только tlbimp.Вам, вероятно, придется связываться с IL.Вам нужно будет добавить что-то вроде:

  .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.. 

Формат 01 NN NN SS1 ... SSN 00 00.

NN NN - длина строки, SS содержит байты ascii, представляющие версию.

...