.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.dll
和MyAssembly.exe
...,但它不会知道您使用的实际 文件名。 可能有一种方法可以在 app.config
中配置它或使用 AppDomain.AssemblyResolve
自己解决程序集 - 但我强烈怀疑其他事情可能会中断。
除此之外,我会劝阻你不要这样做,只是因为它非常规。你会让其他开发人员、工具等感到惊讶——这不是一个好主意。
【讨论】:
正确。短文件名也是如此。 Windows Installer 具有一种数据类型,目录和文件表使用该数据类型来支持旧系统上的短名称。 .NET 根本不喜欢这个。 +1。但我是否认为他可以通过Assembly.CreateInstanceFromAndUnwrap
加载它(我绝不是在暗示他应该!)
@Moo-Juice:或 AppDomain.AssemblyResolve,正如我刚刚在编辑后的答案中所写的那样。有可能其中任何一个都行得通,但我不会花太多精力去找出答案。
@JonSkeet,一点也不怪你 :)
@JonSkeet - 谢谢。这就是我所预料的。感谢您实际试用。以上是关于.NET 中的 DLL 可以使用不同的扩展名,例如米勒?的主要内容,如果未能解决你的问题,请参考以下文章
我可以通过不同的“API”DLL 只公开一个 .NET DLL 的公共类的一部分吗?