找不到 DLL,因为文件名与引用的文件名不同
本文关键字:文件名 引用 因为 找不到 DLL | 更新日期: 2023-09-27 18:32:38
我一直很困惑这怎么会发生。
所以这就是交易,我试图用一个名为 NV2 的 dll 播放 V2M 芯片曲.dll
它被引用,我像往常一样使用它的功能。但是当我尝试运行应用程序时,我得到
无法加载 DLL"V2.dll":找不到指定的模块。(HRESULT的例外:0x8007007E)
我使用的引用DLL称为NV2,我已经检查过了,程序集通过NV2而不是V2,为什么它试图加载具有不同名称的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();
}
}
}