我们使用tlbimp来生成互操作程序集。我们希望用文件版本和程序集版本来标记互操作程序集。但是,tlbimp上的/asmversion选项似乎将这两者设置为相同的值。
有人知道如何使用tlbimp在互操作程序集上设置不同的文件和程序集版本吗?
发布于 2011-04-01 05:44:53
最后,我们在Codeplex上找到了几个关于名为tlbimp2的项目的链接,并编译了我们自己的tlbimp2修改版本:
我从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();否则将不会使用自定义资源。
希望这对其他有同样问题的人有所帮助。
发布于 2011-03-30 07:39:24
只使用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字节。
https://stackoverflow.com/questions/5455520
复制相似问题