5

我正在使用 Visual Studio 2010 中的 C# .NET 项目。我正在集成一个具有 DLL 的硬件外围设备。我在我的项目中引用了 DLL 文件,并且代码编译/构建没有任何错误。当我运行我的应用程序时,我得到一个运行时错误,说它正在寻找另一个 DLL 文件。我在项目中引用的 DLL 似乎有 42 个其他 DLL 依赖于它。当我将这 42 个 DLL 放在输出目录 (bin/debug) 中时,应用程序运行得很好。

我的问题是:当 Visual Studio 无法将这些额外的 DLL 文件识别为依赖库时,管理这些额外 DLL 文件的最佳方法是什么?

4

4 回答 4

6

此方案与部署 SQL Server Compact 文件非常相似。在这种情况下,它被称为Private File–Based Deployment.
它还需要应用程序依赖的一些外部(非托管)DLL。

它归结为将 DLL 包含在您的项目中并将它们的Copy to Output Directory属性设置为Copy if newer. 成功构建后,它们将被复制到目标文件夹。

编辑:
根据您的评论,您似乎在安装应用程序时遇到问题(您在问题中完全没有提及),并且您已经Custom Action为安装程序编写了一个将这 42 个 DLL 复制到目标的问题。
CA 不需要这样做。只需右键单击您的安装程序项目 -> 查看 -> 文件系统。选择Application Folder,在右侧右键单击并选择Add File并添加您的 42 个 DLL。

于 2013-01-29T17:48:19.480 回答
2

如果您打算在编译时管理这些文件,您可以将构建后事件添加到项目中,以将所有必要的文件复制到输出目录。在此处将标志添加到 xcopy 以仅在更改时复制。

如果您的意思是在运行时安装程序将是您最好的解决方案。

于 2013-01-29T18:21:07.597 回答
1

或者,您可以使用 ILMerge 之类的工具将它们组合起来以组合程序集。您只需添加对生成的程序集的引用。

如何将多个程序集合并为一个?

于 2013-01-29T18:01:49.623 回答
0

您应该创建一个安装程序包,如果项目输出根据安装程序的需要进行配置,几乎所有安装程序都会引入引用 dll 的所有依赖项。这是我能想到的动态自动引入非引用依赖项的唯一方法。

于 2013-01-29T18:15:12.503 回答