【问题标题】:Reference to exe in a .Net 4.6.1 project在 .Net 4.6.1 项目中引用 exe
【发布时间】: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


【解决方案1】:

感谢@vasily.sib 和以下链接,我能够解决此问题。

我实际上可以引用项目中的任何 EXE 程序集并在其上调用方法。任何人都可以对 EXE(以及 DLL)进行强命名和签名,而不仅仅是拥有该 EXE 源代码的开发人员。有关详细信息,请参阅以下链接。

谢谢。

https://chrisbenard.net/2009/07/16/strong-name-an-assembly-without-source-code/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-26
    • 2023-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-24
    • 1970-01-01
    相关资源
    最近更新 更多