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

C# 无法加载文件或程序集SharpDX,c#,sharpdx,easyhook,C#,Sharpdx,Easyhook,我使用easyhook和SharpDX从DirectX游戏中获取fps数据。有时它是有效的。但是,当我下次启动它时(可能几分钟后),它抛出异常System.IO.FileNotFoundException:无法加载文件或程序集SharpDX 当我重新启动它几次,它可以工作。为什么?有人有和我一样的问题吗 SharpDX版本:2.4.2我不使用EasyHook,但以下代码也适用于您。请执行以下操作,而不是使用具有某些限制的ILMerge: 1) 将SharpDx.dll的签名副本和所有其他需要的S

我使用
easyhook
SharpDX
从DirectX游戏中获取fps数据。有时它是有效的。但是,当我下次启动它时(可能几分钟后),它抛出异常
System.IO.FileNotFoundException:无法加载文件或程序集SharpDX

当我重新启动它几次,它可以工作。为什么?有人有和我一样的问题吗


SharpDX版本:2.4.2

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

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

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

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

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;
         }
     };
 }

您的EasyHook注入呼叫是什么样子的?在过去,我也曾使用ILMerge将SharpDX、EasyHook和我的程序集组合成一个。