Tag: .net assembly

为什么我(有时)必须引用我引用的程序集引用的程序集?

我有一个程序集A,它定义了一些带有一些重载的接口: public interface ITransform { Point InverseTransform(Point point); Rect InverseTransform(Rect value); System.Drawing.Point InverseTransform(System.Drawing.Point point); } …以及引用A(二进制文件而不是项目)的程序集B并调用其中一个重载: var transform = (other.Source.TransformToDisplay != null && other.Source.TransformToDisplay.Valid) ? other.Source.TransformToDisplay : null; if (transform != null) { e.Location = transform.InverseTransform(e.Location); } 确切地说,它调用InverseTransform方法的System.Windows.Point重载,因为这是e属性Location的类型。 但是当我在IDE中构建B时,我得到: 错误CS0012:类型’System.Drawing.Point’在未引用的程序集中定义。 您必须添加对程序集’System.Drawing,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a’的引用。 即使这甚至不是我所说的过载。 当我注释掉调用重载方法InverseTransform ,即使我仍在实例化ITransform类型的对象,它也能正常构建。 为什么? 有没有办法解决这个问题,而无需在任何地方添加对System.Drawing的引用?

将多个图标(Win32-Resource)添加到.NET应用程序

可以在Project Properties中设置Application-Icon。 如果你这样做,exe将有这个图标而不是默认的图标。 此图标是win32资源,也可以像这样访问: 我想有我的程序使用的文件类型的特殊图标。 要关联文件类型图标我可以在注册表中指定它(“DefaultIcon”键中的“MyProg.exe,1”)。 那么如何将更多图标添加到我可以将它用于文件类型关联的程序集中? 非常感谢你 ps:它是一个WPF应用程序(.NET 4.0)

检索JIT输出

我有兴趣通过C#程序查看实际的x86程序集输出(而不是CLR字节码指令)。 有没有一个很好的方法来做到这一点?

如何添加对System.Numerics.dll的引用

我想使用System.Numerics中的BigInteger类,但如果我想写 using System.Numerics; 没有找到数字。 我搜索了网页,发现我必须添加对System.Numerics.dll的引用,但是我该怎么做呢?

使用AppDomain.AssemblyResolve事件

我正在尝试使用AppDomain.AssemblyResolve事件来处理exception,同时解析在运行时加载的某些dll的程序集( SerializedException用于动态加载的Type )。 当事件被触发时,我在我的目录中加载所有DLL并创建一个Assembly数组,然后我使用这个方法来获得包含我指定的类型的Assembly : public static Assembly GetAssemblyContainingType(String completeTypeName, Assembly[] assemblies) { Assembly assembly = null; foreach (Assembly currentassembly in assemblies) { Type t = currentassembly.GetType(completeTypeName, false, true); if (t != null) { assembly = currentassembly; break; } } return assembly; } 问题是此代码仅适用于AssemblyQualifiedName ,并且事件提供的ResolveEventArgs.Name不太有用。 你能建议我一些解决方法吗? 有没有办法在事件被触发时传递一些其他参数?

.NET Framework中的“AssemblyTitle”属性

AssemblyTitle属性的实际用途是什么? MSDN表示它指定了程序集的描述,并且程序集标题是一个友好名称,可以包含空格。 Visual Studio在项目的属性窗口中询问程序集名称以及默认名称空间。 有一个AssemblyName属性,但它完整地描述了程序集的唯一标识(即文化等)。 我没有看到AssemblyTitle与AssemblyTitle区别。 我使用IL反汇编程序来了解Microsoft如何使用AssemblyTitle 。 我发现在mscorlib.dll中 , AssemblyTitle , AssemblyProduct和AssemblyDefaultAlias都设置为”mscorlib.dll” 。 总之,我真正希望看到的是使用AssemblyTitle实际例子。

System.IO.FileNotFoundException:在部署应用程序时无法加载文件或程序集“X”或其中一个依赖项

我在部署一个应用程序时遇到了一个奇怪的问题,该应用程序引用了一个用托管c ++编写的程序集。 我已经创建了一个程序集X,编译它并在一个名为Starter的exe文件中引用它。 Starter.exe在本地mashine上正常启动。 但是,当我将启动器调试文件夹的所有内容复制到虚拟mashine并尝试在那里启动时,它会崩溃并出现以下exception: Unhandled Exception: System.IO.FileNotFoundException: Could not load file or assembly ‘X’ or one of its dependencies. The specified module could not be found. 这对我没有任何意义,因为X与Starter.exe位于同一文件夹中。 什么可能导致这个问题? UPDATE 我已经在目标机器上检查了Reflector中的依赖项,并且能够找到所有这些文件的文件。 我还为所有项目将配置更改为x86 / win32。 UPDATE 以下是Fusion Log的日志(位置:C:\ FusionLog \ Default \ Starter.exe \ X,Version = 1.0.4538.22813,Culture = neutral,PublicKeyToken = null.HTM): *** Assembly Binder Log Entry […]

为什么AppDomain.CurrentDomain.BaseDirectory在asp.net应用程序中不包含“bin”?

我有一个像以下网站项目: namespace Web { public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { lbResult.Text = PathTest.GetBasePath(); } } } PathTest.GetBasePath()方法在另一个Project中定义,如: namespace TestProject { public class PathTest { public static string GetBasePath() { return AppDomain.CurrentDomain.BaseDirectory; } } } 为什么它显示…\Web\而TestProject程序集被编译成bin文件夹(换句话说,它应该在我的思想中显示…\Web\bin )。 如果我修改了方法,我现在遇到了麻烦: namespace TestProject { public class FileReader { private const string […]