首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用tlbimp指定不同的文件和程序集版本?

如何使用tlbimp指定不同的文件和程序集版本?
EN

Stack Overflow用户
提问于 2011-03-28 14:47:07
回答 2查看 960关注 0票数 9

我们使用tlbimp来生成互操作程序集。我们希望用文件版本和程序集版本来标记互操作程序集。但是,tlbimp上的/asmversion选项似乎将这两者设置为相同的值。

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-04-01 05:44:53

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

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

我从2的tlbimp项目中提取了代码,并按照1的方式对其进行了修改。有几个问题我们必须解决:

在TlbImp.cs中,我必须根据FileVersionInfo.GetVersionInfo的结果显式地组装文件版本号,因为FileVersion属性是空的:

代码语言:javascript
复制
    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中,我必须切换:

代码语言:javascript
复制
 AsmBldr.DefineVersionInfoResource(
   strProduct, 
   strProductVersion, 
   strCompany, 
   strCopyright, 
   strTrademark);

至:

代码语言:javascript
复制
 AsmBldr.DefineVersionInfoResource();

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

希望这对其他有同样问题的人有所帮助。

票数 7
EN

Stack Overflow用户

发布于 2011-03-30 07:39:24

只使用tlbimp似乎不太可能做到这一点。你可能不得不弄乱IL。您需要添加类似以下内容的内容:

代码语言:javascript
复制
  .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字节。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5455520

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档