Tag: 程序集解析

Windows服务锁定assembly负载

我有一个用C#编写的Windows服务。 它还包括一个独立的控制台模式,用于调试目的。 它几乎在每台运行的计算机上运行良好,但是当你尝试启动它时,我们遇到了这个服务锁定的情况,然后它因超时而被杀死。 但是当它在同一台机器上以控制台模式运行时,启动正常。 调试很痛苦,因为我实际上无法访问正在发生的机器,我必须通过人工代理。 但经过一系列的试错调试后,我终于将原因缩小到assembly负载。 当它遇到对特定dll中任何数据类型的第一次引用时,它会根据日志文件在那里停止。 它甚至没有例外,它只是锁定。 [编辑]进一步检查后,它似乎没有永久锁定,实际完成加载库只需要大约40秒,这足以让Windows服务决定终止进程。 有任何线索如何调试这种情况? 这是关于我可以用它重现它的最简单的解决方案。 “之前”显示,但“在”和“之后”不显示。 private static void LoadAssembly() { Log(“During”); MyNameSpace.MyClass x = new MyNameSpace.MyClass(); } static void Main(string[] args) { try { // Leaving out code to handle command line parameters // … // Log(“Before”); LoadAssembly(); Log(“After”); if (Environment.UserInteractive) { Log(“Starting in console mode”); ConnectionManager.Listen(); } […]

模仿msbuild进程的程序集解析

我正在编写一个validation工具,用于检查项目中引用的文件版本。 我想使用MSBuild使用的相同解析过程。 例如,Assembly.Load(..)需要一个完全限定的程序集名称。 但是,在项目文件中,我们可能只有“System.Xml”之类的东西。 MSBuild可能使用项目的目标框架版本和其他一些启发式来决定要加载哪个版本的System.Xml。 你将如何模仿(或直接使用)msbuild的assembly解决过程? 换句话说,在运行时,我想获取字符串“System.Xml”,以及.csproj文件中找到的其他信息,并找到msbuild将找到的相同文件。

在2个.NET程序集中使用相同名称和命名空间的类型

出于好奇,我创建了两个程序集,它们都有一个类( Class1 ),具有完全相同的命名空间( Library1 )。 然后,我创建另一个引用这2个程序集的客户端,并尝试创建Class1的实例。 毫不奇怪,编译器给出了关于模糊引用的编译错误。 有没有办法明确指定我想要使用的程序集中的类型以避免歧义? 注意:我很少知道,如果有的话,在实践中发生。 这只是一个关于语言特征的好奇心的问题。