9

tlbimpを使用して相互運用機能アセンブリを生成しています。相互運用機能アセンブリにファイルバージョンとアセンブリバージョンの両方をスタンプしたいと思います。ただし、tlbimpの/ asmversionオプションは、これらの両方を同じ値に設定しているようです。

tlbimpを使用して相互運用機能アセンブリにさまざまなファイルとアセンブリのバージョンを設定する方法を知っている人はいますか?

4

2 に答える 2

7

最後に、codeplex上のtlbimp2と呼ばれるプロジェクトに関するいくつかのリンクを見つけ、tlbimp2の独自の変更バージョンをコンパイルしました。

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

2のtlbimpプロジェクトからコードを取得し、1の行に沿って変更しました。回避する必要のある問題がいくつかありました。

TlbImp.csでは、FileVersionプロパティが空だったため、FileVersionInfo.GetVersionInfoの結果からファイルバージョン番号を明示的にアセンブルする必要がありました。

    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();

または、カスタムリソースは使用されません。

これが同じ問題を抱えている他の誰かに役立つことを願っています。

于 2011-03-31T21:44:53.433 に答える
1

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バイトで構成されます。

于 2011-03-29T23:39:24.370 に答える