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

发布于 2024-10-27 08:41:05 字数 142 浏览 6 评论 0原文

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

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

We are using tlbimp to generate interop assemblies. We would like to stamp the interop assemblies with both a File Version and an Assembly Version. However, the /asmversion option on tlbimp seems to be setting both of these to the same value.

Does anyone know how to set up different File and Assembly versions on an interop assembly using tlbimp?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

眼中杀气 2024-11-03 08:41:06

最后,我们在 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 属性为空:

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

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

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

In the end we found a couple of links about a project called tlbimp2 on codeplex, and compiled our own modified version of tlbimp2:

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

I took the code from the tlbimp project of 2. and modified it along the lines of 1. There were a couple of problems we had to work around:

In TlbImp.cs I had explicitly to assemble the file version number from the result of FileVersionInfo.GetVersionInfo, since the FileVersion property was empty:

    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;
    }

In tlbimpcode.cs I had to switch:

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

to:

 AsmBldr.DefineVersionInfoResource();

Or the custom resources would not be used.

Hope this helps someone else with the same problem.

是你 2024-11-03 08:41:06

仅使用 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 字节。

It seems pretty unlikely you'll be able to do this using only tlbimp. You'll probably have to mess with the IL. You'll need to add something along the lines of:

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

The format is 01 NN NN SS1 ... SSN 00 00.

NN NN is the length of the string, SS comprises the ascii bytes representing the version.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文