c#app在其工作目录中找不到dll

时间:2011-12-03 17:15:38

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

我刚从C ++切换到C#,我对引用DLL有点困惑。 我有第三方DLL,我的简单功能测试应用程序使用它的一些方法。当我编译项目时,一切顺利。但是,当我在另一台计算机上运行它时,虽然DLL在应用程序的工作目录中,但它仍然缺少DLL。

更奇怪的是,我有一个相当复杂的应用程序的源代码,它依赖于此DLL的旧版本。它将DLL复制到工作目录(就像我的应用程序一样)并且运行良好。我已经完成了代码和所有解决方案项目的设置,我发现没有任何有意义的不同,这使得它的工作,而我的测试应用程序没有。

请告诉我如何从工作目录(Visual Studio 2010)中引用dll。 感谢

编辑 - 例外:

System.IO.FileNotFoundException未处理

消息=无法加载文件或程序集'TIS.Imaging.ICImagingControl32,Version = 3.2.4.1146,Culture = neutral,PublicKeyToken = 257805929e8b7928'或其依赖项之一。系统找不到指定的文件。

源= ICtestapp

FileName = TIS.Imaging.ICImagingControl32,Version = 3.2.4.1146,Culture = neutral,PublicKeyToken = 257805929e8b7928

FusionLog = WRN:程序集绑定日志记录已关闭。

要启用程序集绑定失败日志记录,请将注册表值[HKLM \ Software \ Microsoft \ Fusion!EnableLog](DWORD)设置为1.

注意:程序集绑定失败日志记录会导致性能损失。 要关闭此功能,请删除注册表值[HKLM \ Software \ Microsoft \ Fusion!EnableLog]。

堆栈跟踪:        在ICtestapp.Form1.InitializeComponent()        在ICtestapp.Form1..ctor()        在ICtestapp.Program.Main()   InnerException:

3 个答案:

答案 0 :(得分:4)

这是一篇来自.net团队的Suzanne Cook关于调试.net加载程序问题的好文章。

http://blogs.msdn.com/b/suzcook/archive/2003/05/29/57120.aspx

以下是有关如何加载的详细信息:

http://msdn.microsoft.com/en-us/library/yx7xezcf(v=vs.71).aspx

答案 1 :(得分:1)

项目引用中必须add the dll as reference,一旦在引用中添加了库,编译程序时dll将自动复制到编译输出文件夹,除非在引用属性中另有指定。

然后,如果您复制在另一台PC的新位置的编译输出文件夹中找到的所有项目,则不会有任何问题。

另请检查另一台计算机上安装的.NET框架是否至少与项目目标的级别相同。

答案 2 :(得分:-1)

当您将调试可执行文件复制到另一台计算机时,也会发生这种情况。尝试在发行版中进行编译并进行迁移。