我创建了一个图表 C# 库(我们称之为chartlibrary
)它本身依赖于多个第三方 dll 文件。
在另一个可执行项目中(我们称之为chartuser
),我参考了chartlibrary
项目(两个项目位于 Visual Studio 中的同一解决方案中)。
编译后,我可以看到所有第三方dll文件chartlibrary
引用也包含在 bin/Debug 文件夹中chartuser
。但是,我收到一个运行时错误,这基本上表明以下事实:chartlibrary
无法解决。然后我尝试通过以下方式获得更好的想法
AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve;
and
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 并且无法解析程序集?
Fix:针对与混淆引擎相关的第三方库的修复解决了该问题。
.NET 依赖项:也许浏览一下这个旧答案:如何确定 .NET 应用程序的依赖关系? https://stackoverflow.com/questions/227886/how-do-i-determine-the-dependencies-of-a-net-application- 并检查任何清单文件?
调试: Microsoft 程序集绑定日志查看器 https://learn.microsoft.com/en-us/dotnet/framework/tools/fuslogvw-exe-assembly-binding-log-viewer可以向您展示运行时发生了什么。通过启动它Developer Command Prompt for Visual Studio
(只需搜索“开发者命令”,输入"FUSLOGVW.exe"
并按Enter
)。也可以略读一下:运行时如何定位程序集 https://learn.microsoft.com/en-us/dotnet/framework/deployment/how-the-runtime-locates-assemblies.
我不太熟悉它们的用途,但还有一些其他工具(大多数工具除了依赖项之外还有更多用途):
-
ILSpy https://github.com/icsharpcode/ILSpy- 我相信它是开源的。
-
AsmSpy https://stackoverflow.com/a/36404201/129130- 从未尝试过。
-
NDepend https://stackoverflow.com/a/308256/129130- 商业的。
应用程序启动清单:
- 在客户端系统中安装后桌面应用程序无法打开 https://stackoverflow.com/questions/53512998/desktop-applicaton-not-opening-after-installation-in-client-system/53530377#53530377
- Windows 应用程序启动错误异常代码:0xe0434352 https://stackoverflow.com/questions/49623588/windows-application-startup-error-exception-code-0xe0434352/49637913#49637913
Runtimes:如果问题发生在另一台计算机上,则首先检查列表中的明显运行时间:.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、程序集等...)。
其他链接:
- 哪些winform项目文件应该打包到安装程序中 https://stackoverflow.com/questions/51939079/which-winform-project-files-should-be-packed-up-into-the-installer
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)