如何获得(可能)在GAC中注册的DLL的(物理)安装路径?此DLL是一个控件,可以托管在.Net应用程序以外的东西中(包括除VS之外的IDE ...).
当我使用System.Reflection.Assembly.GetExecutingAssembly().Location时,它给出了winnt\system32中GAC文件夹的路径 - 或者在VS中的设计模式中给出了VS IDE的路径.
我需要获得实际安装物理dll的路径 - 或者VS的bin/debug或(release)文件夹.
原因是我需要在此文件夹中获取一个XML文件,其配置设置既可以在设计模式下使用,也可以在运行时使用.
或者如何处理这种情况最好?我目前在设计模式中使用了一个可疑的网络位置...(不要认为ApplicationData文件夹会削减它(但是因为通过ClickOnce ans安装的.Net版本可以使用Clickonce数据)文件夹))
如果某些内容被放入GAC中,它实际上会被复制到%WINDIR%\ assembly下的某个位置,就像
C:\WINDOWS\assembly\GAC_32\System.Data\2.0.0.0__b77a5c561934e089\System.Data.dll
我假设当你在GAC中安装有问题的程序集的位置时,你会看到类似的东西.这实际上是正确的.(在.NET 1.1中,当您查看GAC程序集的属性时,列出了"代码库",但这只是为了向您显示运行gacutil时原始文件所在的位置 - 它实际上并未指示要加载的内容.你可以在这里阅读更多相关信息.
长话短说,你可能无法做你想做的事.Assembly.GetExecutingAssembly()
您可能希望将行为切换为相对于主应用程序程序集(Assembly.GetEntryAssembly()
)的行为,或者将文件放在某个众所周知的位置(可能基于获取的环境变量),而不是查看正在加载的程序集().组.