.NET 中的 DLL 可以使用不同的扩展名,例如米勒?

Posted

技术标签:

【中文标题】.NET 中的 DLL 可以使用不同的扩展名,例如米勒?【英文标题】:Can DLL in .NET use a different extension, e.g. MLL? 【发布时间】:2013-05-29 20:08:30 【问题描述】:

我知道这是一个古怪的问题,但在 Visual Studio 2010 C#.Net 中有一种方法可以使用与 DLL 不同的扩展名来命名程序集。例如,MyAssembly.MLL 而不是 MyAssembly.DLL。

我四处寻找,但找不到方法。

【问题讨论】:

为什么要这样做?你能从中得到什么? 您能否详细说明这一变化背后的意图? 你可以只做一个后期构建步骤来完成rename foo.dll foo.whackyshit。但我也很好奇你为什么要这么做。 如果他在运行时加载它,他可能会使用扩展来区分他的 DLL 和其他 DLL。我知道 Python 会为 Python 扩展模块做到这一点;它们以“pyd”结尾。 @TaylorBrandstetter,现有方法可以确定在 .NET 环境中使用哪个 Dll。 【参考方案1】:

不,我不这么认为——至少在没有大量额外工作的情况下是这样。

我刚刚尝试了手动重命名步骤,尽管您可以针对重命名的程序集编译,但在执行时不会找到它。该代码将包含对MyAssembly 的引用,运行时将尝试将其解析为MyAssembly.dllMyAssembly.exe...,但它不会知道您使用的实际 文件名。 可能有一种方法可以在 app.config 中配置它或使用 AppDomain.AssemblyResolve 自己解决程序集 - 但我强烈怀疑其他事情可能会中断。

除此之外,我会劝阻你不要这样做,只是因为它非常规。你会让其他开发人员、工具等感到惊讶——这不是一个好主意。

【讨论】:

正确。短文件名也是如此。 Windows Installer 具有一种数据类型,目录和文件表使用该数据类型来支持旧系统上的短名称。 .NET 根本不喜欢这个。 +1。但我是否认为他可以通过Assembly.CreateInstanceFromAndUnwrap加载它(我绝不是在暗示他应该!) @Moo-Juice:或 AppDomain.AssemblyResolve,正如我刚刚在编辑后的答案中所写的那样。有可能其中任何一个都行得通,但我不会花太多精力去找出答案。 @JonSkeet,一点也不怪你 :) @JonSkeet - 谢谢。这就是我所预料的。感谢您实际试用。

以上是关于.NET 中的 DLL 可以使用不同的扩展名,例如米勒?的主要内容,如果未能解决你的问题,请参考以下文章

一个.Net进程中的不同平台AppDomains?

这个 DLL 是托管的还是非托管的?

从非托管进程中卸载 .NET DLL

我可以通过不同的“API”DLL 只公开一个 .NET DLL 的公共类的一部分吗?

如何使用包含在其类依赖注入中的 .net 5 类库的 dll?

VB .NET 制作的DLL无法被 .NET 程序引用