找不到 DLL,因为文件名与引用的文件名不同

本文关键字:文件名 引用 因为 找不到 DLL | 更新日期: 2023-09-27 18:32:38

我一直很困惑这怎么会发生。

所以这就是交易,我试图用一个名为 NV2 的 dll 播放 V2M 芯片曲.dll

它被引用,我像往常一样使用它的功能。但是当我尝试运行应用程序时,我得到

无法加载 DLL"V2.dll":找不到指定的模块。(HRESULT的例外:0x8007007E)

我使用的引用DLL称为NV2,我已经检查过了,程序集通过NV2而不是V2,为什么它试图加载具有不同名称的dll?!

找不到 DLL,因为文件名与引用的文件名不同

所以很明显,NV2.dll内部有一个对V2.dll的引用。要么文档很糟糕,要么你没有注意到那部分,但是在 NV2 类的构造函数中,他们尝试编写该V2.dll,它保存在 dll 的Resources内,作为磁盘的byte[] V2,即目录C:'Windows'system32。法典:

    public NV2()
    {
        List<WeakReference> _ENCList = NV2.__ENCList;
        Monitor.Enter(_ENCList);
        try
        {
            NV2.__ENCList.Add(new WeakReference(this));
        }
        finally
        {
            Monitor.Exit(_ENCList);
        }
        //Here comes the part that writes the resources
        FileStream fileStream = new FileStream(string.Concat(Environment.GetFolderPath(Environment.SpecialFolder.System), "''V2.dll"), FileMode.OpenOrCreate);
        fileStream.Write(Resources.V2, 0, checked((int)Resources.V2.Length));
        fileStream.Close();
    }

这意味着在您的应用程序中,您首先必须执行

  var engine = new NV2(); //triggers the constructor code

来触发它,或者你对此进行硬核并从他们的 DLL 中转储byte[]

我已经为您将该文件转储到此处并压缩了它:http://www.file-upload.net/download-11263190/V2.zip.html

(您可以通过使用 teleriks 反编译器保存项目、修复资源中的错误、将项目更改为控制台项目,然后编写 Main 函数来做到这一点)

using System.IO;
using NV2.My.Resources;
namespace NV2
{
    class MainClass
    {
        static void Main(string[] args)
        {
            FileStream fileStream = new FileStream("V2.dll", FileMode.OpenOrCreate);
            fileStream.Write(Resources.V2, 0, checked((int)Resources.V2.Length));
            fileStream.Close();
        }
    }
}