我正在使用Visual Studio 2010中的C#.NET项目。我正在集成具有DLL的硬件外围设备。我在我的项目中引用了DLL文件,代码编译/构建没有任何错误。当我运行我的应用程序时,我得到一个运行时错误,说它正在寻找另一个DLL文件。看来我在我的项目中引用的DLL有42个其他依赖的DLL。当我将这42个DLL放在输出目录(bin / debug)中时,应用程序运行得很好。
我的问题是:当Visual Studio不将它们识别为依赖库时,管理这些额外DLL文件的最佳方法是什么?
答案 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等组合它们来组合它们。 您只需添加对生成的程序集的引用。
答案 3 :(得分:0)
您应该致力于创建一个安装程序包,如果根据安装程序的需要配置项目输出,几乎所有安装程序都会引入所引用的dll的所有依赖项。这是我能够想到动态地自动引入未引用的依赖项的唯一方法。