我刚从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:
答案 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)
当您将调试可执行文件复制到另一台计算机时,也会发生这种情况。尝试在发行版中进行编译并进行迁移。