我创建了一个图表C#库(我们将其称为chartlibrary
),它本身依赖于多个第三方dll文件。
在另一个可执行项目(我们称为chartuser
)中,我引用了chartlibrary
项目(两个项目都位于Visual Studio中的同一解决方案中)。
编译后,我看到chartlibrary
引用的所有第三方dll文件也包含在chartuser
的bin / Debug文件夹中。但是,我收到一个运行时错误,该错误基本上指向一个事实,即chartlibrary
中的某些引用无法解析。然后,我尝试通过
AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve;
和
private static Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
{
var assemblyFileName = args.Name.Substring(0, args.Name.IndexOf(",")) + ".dll";
var assemblyPathFileName = _currentPluginPath + @"\" + assemblyFileName;
if (File.Exists(assemblyPathFileName))
{
return Assembly.Load(File.ReadAllBytes(assemblyPathFileName));
}
return null;
}
问题是RequestingAssembly
为空,而Name
却很隐秘。
即使所有dll都位于可执行项目的bin / Debug文件夹中,也找不到参考dll并且无法解析程序集,这是我做错了什么?
答案 0 :(得分:1)
修复 :针对第三方库的混淆引擎修复程序解决了该问题。
.NET依赖项 :也许可以略过这个旧答案:How do I determine the dependencies of a .NET application?-并浏览所有清单文件?
调试 :The Microsoft Assembly Binding Log Viewer可以向您显示运行时的情况。通过 Developer Command Prompt for Visual Studio
启动它(只需搜索“开发人员命令”,键入 "FUSLOGVW.exe"
,然后按 Enter
< / strong>)。也可能有一个略读:How the Runtime Locates Assemblies。
我不太熟悉它们的用法,但是还有一些其他工具(大多数工具除了依赖项以外还有其他用途):
应用程序启动检查清单 :
运行时 :如果问题在另一台计算机上发生,则显而易见的运行时首先出现在检查清单上:.Net
,.Net Core
,Java
,Silverlight
,Direct X
,VC++ Runtime
,MS-XML (legacy)
,Crystal Reports
,Microsoft Report Viewer
,SQL Server / Database Runtimes
等...加上涉及COM注册的所有内容,以及您所引用的任何第三方框架组件(COM,COM Interop,GAC,Assemblies等)。
其他链接 :