Mono程序集文件夹?

3
在Windows系统中,注册表有像这样的键:
HKLM\SOFTWARE\Microsoft\.NETFramework\v2.0.50727\AssemblyFoldersEx
用于存放除GAC之外的.NET程序集文件夹的位置信息。
在非Windows Mono系统中是否有检索这些信息的方法,或者这被认为不重要?

4
为什么会有这个需求呢?安装程序是安装程序集到应用程序目录或者组件缓存中的工具,你的代码与这些文件夹没有任何关系。 - Oliver Friedrich
你的代码与这些文件夹没有任何关系。你怎么知道呢?我从来没有提到过我的代码。 - Tim Matthews
那么请解释一下为什么您需要知道这个位置。很有可能您正在做一些不应该做的事情。 - skolima
@skolima请不要告诉我该做什么和不该做什么。并不是每个人都像你一样。我已经重写了问题。 - Tim Matthews
1
我并不是在评判,我只是想要帮忙。更多的上下文会很有用,因为你的问题并不是简单的。 - skolima
2个回答

5
注册表不是跨平台的。它也不是一个好的存储配置数据的地方。除非你在处理遗留代码,否则不要在.NET中使用注册表。
GAC用于在Mono和.NET中为您跟踪全局程序集。任何本地程序集都应该与程序的其余部分一起保存。
如果您真的需要这些位置(而且您不应该需要),那么您应该在配置文件中手动指定这些位置。
反正,为什么要查找在GAC中的程序集的物理位置呢?

3
首先,在Linux上,Mono将GAC存储为文件、路径和两者之间的链接列表。大部分创建基础mono运行时的代码都使用一个名为MONO_ASSEMBLIES的编译时标志。此值默认设置为构建系统中的$prefix/lib。
在大多数Linux发行版中,$prefix设置为"/usr",因此MONO_ASSEMBLIES将为/usr/lib。 考虑到这一点,GAC的实际基本路径是$prefix/lib/mono/gac。您还可以为mono设置一个环境变量(MONO_GAC_PREFIX),从而允许您为GAC设置多个基本路径。
由于此路径可以根据安装进行更改,而mono允许使用环境变量使用多个路径,因此您可能需要获取Assembly.Location的基本路径。另外,Assembly.GlobalAssemblyCache将帮助您确定是否需要检查其路径。
希望这能帮到您!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接