【发布时间】:2018-10-01 02:48:51
【问题描述】:
我需要对软件公司提供的 EXE 中的方法进行 API 调用。在过去非常旧的 .Net 版本中,我可以通过将 exe 重命名为 dll 来使其工作(我猜?)。这次他们提供的 EXE 似乎是在 4.6.1 中编译的。我无法使其工作,它会导致运行时错误: “无法加载文件或程序集...需要强命名程序集”
我有哪些选择?无论我是否将其重命名为 DLL,是否仍然可以对 EXE 进行 API 调用?还是我应该要求他们提供给我一个合适的 DLL?
谢谢。
【问题讨论】:
-
如果它被签名(强命名).exe,当你重命名它时它将不起作用。无论如何,据我所知,你不需要将 .exe 重命名为 .dll 来加载它(如果你确定这个 .exe 是托管的)
-
谢谢你。我希望这不是一个错字。请澄清:“如果它已签名......它将无法正常工作”。您的意思是说“它会起作用”吗?
-
如果它签名并重命名,它将不起作用,因为文件名是强程序集名称的一部分。
-
好的,等等,这有点误导。第一:您无需重命名任何内容即可将其加载为 .net 程序集,无论它是 .exe、.dll 还是 .txt我>。只要里面有一个托管代码 - 一切都应该工作。第二:我认为/相信,因为文件名包含在程序集强名称中 - 更改它最终会破坏程序集加载。第三:如果程序集已签名 - 您不能(不反汇编)用您的密钥/证书对其进行签名,并且在大多数情况下您不需要这样做。
-
不,非强命名(未签名)程序集可能由开发人员或其他任何人强命名,但大多数情况下开发人员不签名(强-命名)他们的程序集。但是,如果他们确实对他们的程序集进行了强命名 - 很难“重新命名”它们。
标签: c# .net dll exe .net-4.6.1