ILASM无法设置文件版本号

8

我有一个.il文件可以编译,没有任何问题。我可以对其进行强命名而不会遇到任何问题。但是,我无法像预期的那样通过属性设置文件版本。当使用ilasm时,如何为程序集设置文件版本?

如果我执行往返操作,我始终会得到一个.res文件,其中仅包含无法读取的二进制数据。这个res文件里面有什么,我能编辑它吗?

这段代码无法运行。

.assembly myAssembly 
{
  .custom instance void [mscorlib]System.Reflection.AssemblyFileVersionAttribute::.ctor(string) = { string('1.2.3.4') }
1个回答

13
问题可以通过使用 .res 文件来解决。仅仅使用 ildasm 和 ilasm 进行一次往返操作是不够的。IL 文件没有引用 .res 文件。我不得不手动将其添加到 ilasm 调用中。res 文件中的数据似乎包含写入 PE 标头的信息,这对我来说是可以的。
最终所需的命令行为:
ilasm test.il /dll /res:test.res

我仍然不知道res文件里面到底是什么,但是我可以将它与手动创建的任何其他程序集的元数据信息进行交换,然后将其反编译以替换原始程序集的元数据,以满足我的需求。

好像没有很多人在做这样的事情。


1
每个C/C++程序员都会这样做。创建.res文件的最简单方法是使用一个虚拟的C++项目。您可以手动编辑.rc文件,也可以使用C++ IDE中的资源编辑器进行编辑。rc.exe SDK工具将其转换为.res文件。 - Hans Passant
谢谢,我没有想到VS实际上可以在二进制编辑器中编辑版本资源。知道ilasm不使用某些神秘的二进制格式是很好的。 - Alois Kraus

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接