有没有办法绕过GAC中的dll检查?

时间:2017-11-30 08:13:45

标签: c# runtime app-config gac

我已经在stackoverflow上进行了很多研究,没有人真正解释过我要做什么。

我有使用TFS Api的应用程序,它正在使用包含dll的Nuget包,如Microsoft.TeamFoundation。*。dll。

这里有一个棘手的部分 - 当我从调试运行应用程序时,一切正常,因为CLR正在从我加载dll,但是当我部署应用程序并开始使用它时,如果存在任何这些dll,它会从GAC加载dll GAC。

这会导致很多错误,因为它会加载不同的版本,例如Microsoft.TeamFoundation.1stdll.dll版本11.2.2302然后Microsoft.TeamFoundation.2nddll.dll版本11.0.2123并且有时它以10开头,然后要求引用10 dll来解决问题而我最终除外。

我做了什么?

我试图指出探测路径没有成功。一旦发现GAC中的版本11.0.2.1和探测中的11.3.1.2,它就会用GAC解析dll。

我尝试过有人解释创建一个新的appdomain并在域名之间分享dll但是我已经达到了死胡同,无论我尝试过从GAC加载它。我还试图在我的应用程序的入口点加载dll,而不是将其重定向到我的路径并解决它。再没有成功。我试图欺骗应用程序并解析点为publicKeyToken返回null以告诉它我使用的是非签名的dll,在这种情况下它不会查看GAC,但没有运气。我试图删除使用Nirsoft snremove.exe的签名并猜猜是什么?也没有成功。

我正在寻找一个代码,无论我的应用程序在多大程度上强制使用我的dll而不是GAC中的一个代码。我想避免在运行时它不会随机选择11.00.xxxx版本,而是使用我特定的11.92.21212.2,即使它有更大版本或在某些情况下更低版本。

作为一种可能的解决方案,我唯一不能接受的是手动配置CLR接口,以便像之前在stackoverflow上提到的那样在C ++中解析和加载程序集。

1 个答案:

答案 0 :(得分:0)

我能想到的一件事是你可以尝试将你加载的新Application域的权限限制为无法更准确地访问文件系统,驱动器或GAC路径,例如在第一次调用时在新域或构造函数中的方法中设置it's done here等权限。

然后,您可以在应用程序的资源中嵌入所需的程序集,并使用AssemblyResolve事件加载它们,如this

相关问题