我正在尝试使用 AssemblyResolve 方法加载嵌入式程序集。然而,其中一个似乎引用了自身,因此在尝试加载它时,它会再次调用 AssemblyResolve。
AppDomain.CurrentDomain.AssemblyResolve += (sender, args) =>
{
using (var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(string.Format("AnalysisViewer.Embedded_DLLs.{0}.dll", new AssemblyName(args.Name).Name)))
{
if (stream == null)
return null;
byte[] assemblyData = new byte[stream.Length];
stream.Read(assemblyData, 0, assemblyData.Length);
return Assembly.Load(assemblyData);
}
};
有办法解决这个问题吗?正在加载的 dll 是 DevExpress 的,所以我无法对其中的代码做任何事情,如果我将它作为标准 dll,它可以正常加载。
我可以恢复为随包分发此 dll,但如果可能的话,我们正在尝试进行单个文件拖放安装。
这是我得到的堆栈跟踪:
AnalysisViewer.exe!AnalysisViewer.App.OnStartup.AnonymousMethod__0(object sender, System.ResolveEventArgs args)
mscorlib.dll!System.AppDomain.OnAssemblyResolveEvent(System.Reflection.RuntimeAssembly assembly, string assemblyFullName)
[Native to Managed Transition]
mscorlib.dll!System.AppDomain.OnAssemblyLoadEvent(System.Reflection.RuntimeAssembly LoadedAssembly)
[Native to Managed Transition]
mscorlib.dll!System.Reflection.Assembly.Load(byte[] rawAssembly)
AnalysisViewer.exe!AnalysisViewer.App.OnStartup.AnonymousMethod__0(object sender, System.ResolveEventArgs args)
最佳答案
好的,这可能对某些人有用。看来问题是 DE dll 正在调用其他不可用的 dll。我以为我已经跟踪了所有必需的 dll,但似乎我错过了一些。一旦我包含了这些,它就会按预期进行处理。
但是,在失败的任何时候它都没有告诉我它试图找到什么 dll。这就是为什么它如此令人沮丧。
关于c# - Assembly Resolve递归成无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32245273/