【发布时间】:2012-05-09 13:07:25
【问题描述】:
我在 VS2010 中有一个 C 控制台程序,我想将其作为单个项目进行编辑/调试/构建。也就是说,我想编写和调试它,就好像它是一个香草控制台 exe,但让它产生一个 dll 作为副产品。我在 SO (Making a C# project DLL and EXE) 上找到了以下信息
DLL 项目应该包含所有可重用的代码。正常项目应该是您正在构建的应用程序,它将引用您的可重用 DLL。这样,您可以在 DLL 项目中构建一个框架,该框架可用于您未来的任何项目。
在 SO 的其他地方,我发现了这个:https://stackoverflow.com/questions/7054481/how-to-produce-a-mix-of-dll-and-exe-in-one-c-sharp-project
您可以像引用 dll 一样引用 .Net 可执行文件,但您可以考虑将 exe 文件复制到具有相同名称的 dll 文件中... 您可以使用项目的 Visual Studio 生成后事件自动执行此过程。每次成功构建时,这将处理创建 dll 副本: 复制 "$(TargetPath)" "$(TargetDir)$(TargetName).dll"
似乎第一个选项意味着维护 2 个不同的项目。是否有理由这样做,而不是按照第二篇文章的建议,只复制我的 exe 并将扩展名从 exe 更改为 dll?
【问题讨论】:
-
这在托管语言中是可能的,但在 C 语言中是不可能的。本机 DLL 具有不同的 CRT 启动代码。并且本机 EXE 不可重定位且不支持导出功能。更大的问题是,如果可能的话,你会在 main() 函数中写什么。你不能写在你的 EXE 项目的 main() 函数中。编写单元测试只是为了测试导出的函数,因为这是任何使用 DLL 的代码唯一可用的东西。还可以考虑创建一个静态库的第三个项目,您可以在 DLL 和 EXE 项目中进行链接。
标签: c visual-studio dll code-reuse