【问题标题】:Is it right to add c# windows exe as reference in another c# winform?在另一个c#winform中添加c#windows exe作为参考是否正确?
【发布时间】:2014-10-14 08:41:53
【问题描述】:

我有 c# winform 应用程序。我可以将此 exe 添加到另一个 winform 应用程序中作为参考。

它像 dll 类型一样工作得很好。

到目前为止,我没有发现任何问题。在这种情况下我需要调查什么问题。

【问题讨论】:

  • 您的 bin 文件夹将包含两个 .exe 文件,这对用户来说是相当奇怪的。最好以正确的方式做事,为所有共享代码创建一个类库并在两个 exe 中引用它。
  • 技术上它可能工作正常。但是你应该检查你为什么这样做。如果您想在两个可执行文件之间共享某些内容,则应该构建一个共享库,也称为 dll。
  • 这是一件很奇怪的事情,您需要将这个 exe 与您的应用程序一起分发,就像它是一个 dll 一样。最好将相关代码提取到新的 DLL 中并从两个程序中引用该 DLL。
  • 这有点不寻常,但我认为这没有任何问题,只要这两个程序以某种方式相关。我的意思是,用户是否应该在其 PC 上同时拥有这两个程序?如果用户启动自己作为 DLL 的程序会发生什么?由此产生的行为是否可以接受?

标签: c# c#-4.0


【解决方案1】:

是的,这很好。 CLR 实际上根本不关心文件扩展名,添加引用时 IDE 也不关心。

CLR 只知道程序集的显示名称。换句话说,当它被要求寻找一个程序集时,它会首先使用全名。例如:

    ClassLibrary1, Version=1.2.3.4, Culture=neutral, PublicKeyToken=b77a5c561934e089

它首先在 GAC 中查找与显示名称 (ClassLibrary1)、版本和令牌的精确匹配。如果做不到这一点,它就会在程序的探测路径中寻找一个文件。只是“ClassLibrary1”。请注意,根本没有指定文件扩展名。它将首先尝试查找“ClassLibrary1.EXE”。如果失败,它接下来会尝试查找“ClassLibrary1.DLL”。没有尝试进一步的扩展。你可以看到这是通过 Fuslogvw.exe 完成的。

注意这种方法存在一个令人讨厌的问题,DLL 不能与 EXE 具有相同的文件名。当要求 CLR 解析 DLL 程序集时,CLR 将加载 EXE。这当然是一个kaboom。 the hard way 发现的问题。它首先查找 EXE 而不是最后一个,这很奇怪。

所以,没什么好担心的。只需将 .exe 重命名为 .dll 也可以。

【讨论】:

  • 对混合模式装配问题着迷。你有这方面的参考吗?
猜你喜欢
  • 2019-10-30
  • 1970-01-01
  • 1970-01-01
  • 2016-09-20
  • 1970-01-01
  • 2017-12-02
  • 2017-04-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多