管理未在Visual Studio中引用的DLL的最佳方法是什么

时间:2013-01-29 17:29:08

标签: c# .net visual-studio-2010 dll dllimport

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

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

4 个答案:

答案 0 :(得分:6)

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

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

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

答案 1 :(得分:2)

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

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

答案 2 :(得分:1)

或者您可以使用ILMerge等组合它们来组合它们。 您只需添加对生成的程序集的引用。

How to merge multiple assemblies into one?

答案 3 :(得分:0)

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