【问题标题】:Unmanaged DLL in Visual Studio 2012 C# project - DllNotFoundException after BuildVisual Studio 2012 C# 项目中的非托管 DLL - 构建后的 DllNotFoundException
【发布时间】:2013-05-07 14:30:26
【问题描述】:

我使用添加现有文件在项目 OldTesters 中添加了一个非托管 dll。 我还设置了 BuildAction = Content 和 Copy to Output Directory = Copy if newer。 我通过 [DllImport("unamanged.dll")]

在 OldTesters 项目中使用非托管 dll 中的一些函数

OldTesters 是我在主项目中使用添加引用引用的 .NET 项目。

问题是当我重建应用程序时一切正常,但随后我关闭应用程序, 然后点击开始,它会抛出我 DllNotFoundException

无法加载 DLL 'unmanaged.dll':找不到指定的模块。 (HRESULT 异常:0x8007007E)

我注意到 Visual Studio 从 bin 目录中删除了 unmanaged.dll。

如果我重建 OldTesters 项目,那么它将起作用。但是重建 OldTesters 总是很烦人,因为我没有在那个项目中添加任何更改。为了证明这一点,如果我点击构建,我会得到:

========== 构建:0 成功,0 失败,6 最新,0 跳过 ==========

因为项目中没有任何变化。当我运行应用程序时,我得到了同样的异常。

【问题讨论】:

  • VS 中没有任何东西可以在您停止调试时自动删除 DLL。无法猜测会发生什么。尝试在构建后使用 attrib.exe 使文件只读。应该有什么了不起的!当执行此操作的任何程序都无法再删除该文件时。
  • DLL 在停止调试后不会被删除,相反它们是存在的。但是当我再次开始调试时,它们将被删除。如果我在 DLL 上添加只读,那么一切正常,文件不会被删除。但是在重建 VS 时无法删除它们,即 无法删除文件“D:\project\source\Branch-AT\unmanaged.dll”。拒绝访问路径“D:\project\source\Branch-AT\unmanaged.dll”。

标签: visual-studio visual-studio-2012


【解决方案1】:

虽然这已经很老了,但我只是偶然发现了同样的问题并找到了以下解决方案: 只需将所有“删除”的 dll 复制到 VS 中的当前项目,然后在创建此项目时复制它们。 因此,在您的情况下,您只需打开项目 OldTesters,单击非托管 dll,复制然后将其粘贴到其他项目的项目中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-31
    • 2018-04-04
    • 2014-01-18
    相关资源
    最近更新 更多