【问题标题】:C# solution referencing a pre-built .exe引用预构建的 .exe 的 C# 解决方案
【发布时间】:2010-09-17 13:16:45
【问题描述】:

我有一个项目,它是我们应用程序的核心。我们构建了几个 DLL 和一个 EXE。

然后我们有自定义项目,这些项目使用预构建的核心 DLL 和 EXE,并根据需要添加自定义/额外位。这些定制始终是 DLL,始终使用核心 EXE。自定义解决方案引用了核心 DLL/EXE。

我在调试加载自定义 DLL 时遇到了一点问题。因为 EXE 是预先构建的,所以我们使用其中一个项目作为启动项目,它指向 EXE 和其余 DLL 的位置。但是,它似乎并没有加载启动项目 DLL。

当 EXE 已经构建时,我应该如何设置我的自定义解决方案/项目?

(注意:如果您想知道,自定义 DLL 会提供从元数据反射加载的组件)

更新:当前的方法是在自定义解决方案的“顶级”项目中进行构建后事件,将所有核心 DLL 和 EXE 复制到 bin/Debug 目录中。然后将该顶级项目设置为启动项目并指向bin/Debug中复制的EXE。然后它会找到 DLL,因为它与 EXE(以及所有其他文件)位于同一目录中。

【问题讨论】:

    标签: c# projects-and-solutions multi-project


    【解决方案1】:

    选择一个 DLL 作为启动项目并以任何方式保证它确实被加载。您正在使用的那个 EXE 必须使用 Assembly.Load/From() 来加载 DLL。此时调试器会介入并激活您设置的断点。

    从 Debug + Windows + Modules 窗口很容易分辨。如果您没有看到在该窗口中加载了您的 DLL,那么什么都不会发生。您需要了解该 EXE 的确切配置规则,以便它加载您要调试的 DLL。

    【讨论】:

    • 谢谢,这很有趣,你说得对,我的 DLL 没有被加载。我们通过构建后复制事件来解决这个问题,该事件将所有外部库复制到自定义项目中“主”DLL 的 /bin/Debug 目录中,然后将启动应用程序指向复制的版本EXE文件。这工作正常,但似乎有点笨拙。除了将所有内容放在同一个目录中之外,我还有其他选项可以让 EXE 在运行时“发现”我的其他 DLL 吗?
    • 我对那个 EXE 的了解比你少。将所有 DLL 放在一个目录中对我来说听起来很正常。当然,在构建后事件中将它们复制到那里是通常的方法。或者您可以只更改 DLL 项目的输出路径属性。项目 + 属性,构建选项卡。
    • 好的,谢谢。我可以接受构建后的方法,因为它是每个项目的一次性设置。我习惯了 Java,它似乎工作起来更流畅,可能是因为在调试或其他情况下需要显式的类路径。
    【解决方案2】:

    您可以运行 .exe,然后将 Visual Studio 调试器附加到进程。确保 .dll 的 .pdb 位于执行目录中。

    【讨论】:

    • 这是用于自定义解决方案的开发工作,因此附加调试器会非常烦人。我只是希望能够像往常一样单击运行/调试,并在加载自定义 DLL 的同时启动 .exe。
    • @Mike 你可以写一个快速宏,所以你按下一个按钮/快捷方式,它就会附加到进程中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-22
    • 2011-12-24
    • 2011-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多