使用C#项目中的DLL,在运行时获取TryLoadException

使用C#项目中的DLL,在运行时获取TryLoadException,c#,visual-studio,visual-studio-2010,dll,dllimport,C#,Visual Studio,Visual Studio 2010,Dll,Dllimport,我在VisualStudio中创建了一个类/库项目,它是SS名称空间中的一个电子表格。接下来,我创建了一个windows窗体应用程序,然后添加了DLL,并将其放在我的“资源”菜单中,它构建得很好,但是在运行时,我得到了一个TryLoadException,文档似乎说它不在程序集中,但为什么它编译得很好呢?此外,我怀疑这是我的DLL的问题,因为我的朋友制作了一个类似的DLL(匹配相同的API,但构建方式不同,并且适用于他的Windows窗体应用程序),我仍然得到TryLoadException 这

我在VisualStudio中创建了一个类/库项目,它是SS名称空间中的一个电子表格。接下来,我创建了一个windows窗体应用程序,然后添加了DLL,并将其放在我的“资源”菜单中,它构建得很好,但是在运行时,我得到了一个
TryLoadException
,文档似乎说它不在程序集中,但为什么它编译得很好呢?此外,我怀疑这是我的DLL的问题,因为我的朋友制作了一个类似的DLL(匹配相同的API,但构建方式不同,并且适用于他的Windows窗体应用程序),我仍然得到
TryLoadException

这是我遵循的程序

  • 创建(并实现)电子表格类
  • 为电子表格gui创建新的解决方案和项目
  • 在项目中,右键单击并添加现有项,即在第一个解决方案bin/debug(或bin/release,我尝试了两者)文件夹中找到的dll。还将dll添加到引用中
  • 在执行get的代码中的某处,添加以下行:

    电子表格ss=新电子表格();//它们已经在同一个名称空间中了

  • 构建时,请注意没有错误

  • 运行时,执行将在TryLoadException处停止

  • 你把DLL放在你的资源菜单里了吗?这似乎真的很奇怪

    有些事情需要尝试。首先,在构建之后,转到Windows窗体项目的调试(或发布,无论您要运行哪个版本)文件夹中查看。你应该在那里看到你的exe,还有你需要的这个DLL。如果没有,则设置引用的方式存在问题,例如没有CopyLocal或其他内容

    其次,如果DLL和Windows窗体应用程序是同一解决方案中的项目,请使用项目引用,而不是浏览DLL。这将使生活变得简单一点

    第三,尝试双击exe而不是按F5,看看这是否会影响任何内容。(在这两种情况下,当前目录是不同的,这在尝试查找DLL时通常是相关的。)


    第四,尝试删除引用,将DLL从资源或任何奇怪的地方拿走,然后再次添加引用。看看情况是否会更好。

    右键单击引用并检查“复制本地”属性——它应该是真的。是的,复制本地属性是真的。不,我不是这个意思。我将dll本身添加到项目的根目录中,但我将其放在引用列表中,以便链接到它。无论如何,谢谢你。出于某种神奇的原因,它今天开始工作。我仍然不能完全确定发生了什么,但现在它起作用了,谢谢。