我们正在使用tlbimp生成互操作程序集。我们想在互操作程序集上同时标记一个文件版本和一个程序集版本。但是,tlbimp上的/asmversion选项似乎将它们都设置为相同的值。

有谁知道如何使用tlbimp在互操作程序集上设置不同的文件和程序集版本?

最佳答案

最后,我们在Codeplex上找到了一个有关名为tlbimp2的项目的链接,并编译了我们自己的tlbimp2修改版本:

  • http://clrinterop.codeplex.com/discussions/208832
  • 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();
    

    否则将不使用自定义资源。

    希望这可以帮助其他遇到相同问题的人。

    关于.net - tlbimp如何用于指定不同的文件和程序集版本?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5455520/

    10-09 06:54