2011-03-28 31 views
6

Birlikte çalışma derlemeler oluşturmak için tlbimp kullanıyoruz. Birlikte çalışma derlemelerini hem bir Dosya Sürümü hem de bir Montaj Sürümü ile damgalamak isteriz. Ancak, tlbimp'deki/asmversion seçeneği, bunların her ikisini de aynı değere ayarlıyor gibi görünüyor.Farklı Dosya ve Montaj sürümlerini belirtmek için tlbimp nasıl kullanılır?

Herkes, tlbimp kullanarak birlikte çalışma derlemesinde farklı Dosya ve Montaj sürümlerinin nasıl ayarlanacağını biliyor mu?

+0

Harika bir soru, ama neden bu yeteneğe tam olarak ihtiyacınız var? – sharptooth

+0

Derleme sürümünü sürümler arasında aynı tutmak istiyoruz (çünkü yeni derleme hala varolan istemcilerle uyumludur), ancak yükleyicimizin derlemenin eski bir sürümünü daha yeni bir (ör. Bugfix) biriyle değiştirmesini istiyoruz (ve yükleyici bunun için FileVersion kullanır). – dominic

+0

Anladım, bu oldukça mantıklı. – sharptooth

cevap

5

biz Codeplex üzerinde tlbimp2 adlı bir proje hakkında birkaç bağlantı bulundu ve tlbimp2 bizim kendi değiştirilmiş versiyonu derlenmiş: http://clrinterop.codeplex.com/SourceControl/changeset/view/39798

  1. http://clrinterop.codeplex.com/discussions/208832
  2. Çektiğim tlbimp projeden kod 2 ve 1 satırları boyunca değiştirildi. Orada çalışmak zorunda olduğum bir çift problem vardı:

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

    tlbimpcode.cs olarak
    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; 
        } 
    

    ben geçmek zorunda: DosyaSürümü özelliği boştu beriTlbImp.cs I'de, FileVersionInfo.GetVersionInfo sonucu dosya sürüm numarasını montajı açıkça vardı için

    :

    AsmBldr.DefineVersionInfoResource(); 
    

    Veya özel kaynaklar kullanılabilir olmaz.

    Bunun, aynı sorunu olan başka birine yardımcı olmasını umarız.

1

Sadece tlbimp kullanarak bunu yapabilecek olmanız pek mümkün görünmüyor. Muhtemelen IL ile uğraşmak zorunda kalacaksınız. Sen çizgisinde bir şey eklemek gerekir:

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

biçimi 01 NN NN SS1 ... SSN 00 00 olduğunu.

NN NN dizenin uzunluğudur, SS sürümü temsil eden ascii baytlarını içerir. Sonunda

İlgili konular