gpt4 book ai didi

c# - 无法加载文件或程序集 SharpDX

转载 作者:太空宇宙 更新时间:2023-11-03 16:01:44 34 4
gpt4 key购买 nike

我使用 easyhookSharpDX 从 DirectX 游戏中获取 fps 数据。有时它有效。但是,当我下次启动它时(可能只是几分钟后),它会抛出异常 System.IO.FileNotFoundException: Could not load file or assembly SharpDX

当我重新启动它几次后,它就可以工作了。为什么?有没有人遇到和我一样的问题?

SharpDX版本:2.4.2

最佳答案

我不使用 EasyHook,但下面的代码应该也适合您。不要使用具有某些限制的 ILMerge,而是执行以下操作:

1) 将 SharpDx.dll 的签名副本和所有其他需要的 SharpDx 程序集链接到您的项目。将“本地副本”属性设置为“假”。

2) 将这些库添加到您的项目中(就像您对 .cs 文件所做的那样)并将文件的属性设置为“嵌入式资源”和“不要复制到输出文件夹”。确保这些文件与您在步骤 1 中链接的文件完全相同。

3) 注入(inject)后,首先在您的入口点调用以下函数,如果找到,它会从您的资源中加载任意程序集(托管或非托管)。

private static void LoadAssemblyFromResources() {
AppDomain.CurrentDomain.AssemblyResolve += (sender, args) => {
try {
Assembly asm = Assembly.GetExecutingAssembly();
string name = args.Name.Substring(0, args.Name.IndexOf(',')) + ".dll";
string rsc = asm.GetManifestResourceNames().FirstOrDefault(s => s.EndsWith(name));
if (rsc == null) return null; //assembly not found in resources
byte[] module;
using (Stream stream = asm.GetManifestResourceStream(rsc)) {
if (stream == null) return null;
module = new byte[stream.Length];
stream.Read(module, 0, module.Length);
}
try {
return Assembly.Load(module); //Load managed assembly as byte array
} catch (FileLoadException) {
string file = Path.Combine(Path.GetTempPath(), name);
if (!File.Exists(file) || !module.SequenceEqual(File.ReadAllBytes(file)))
File.WriteAllBytes(file, module);
return Assembly.LoadFile(file); //Load unmanaged assembly as file
}
} catch {
return null;
}
};
}

关于c# - 无法加载文件或程序集 SharpDX,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21035400/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com