覆盖OpenExeConfiguration方法

时间:2016-07-21 19:47:55

标签: c# asp.net asp.net-mvc sdk

如何在Web ASP项目中使用ConfigurationManager.OpenExeConfiguration()?

我无法更改用于获取配置信息的方法,因为它是其他人SDK中已编译DLL的一部分。我没办法改变它。

错误我得到了;

  

当不在独立的exe内部运行时,必须指定System.ArgumentException exePath。在System.Configuration.ConfigurationManager.OpenExeConfigurationImpl(ConfigurationFileMap fileMap,Boolean isMachine,ConfigurationUserLevel userLevel,String exePath,Boolean preLoad)   at system.Configuration.ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel userLevel)

我尝试通过添加以下行来解决它;

AppDomain.CurrentDomain.SetData("APP_CONFIG_FILE", @"\\PathTo\Web.config");

但它没有解决问题。

我的下一个赌注是以某种方式覆盖ConfigurationManager.OpenExeConfiguration()方法,以便它被调用,它应该调用ConfigurationManager.OpenWebConfiguration(),这是同一方法的网络版本。

任何人都可以告诉我如何实现这个目标吗?

先谢谢了, -Aron

1 个答案:

答案 0 :(得分:1)

为了确保我理解:对OpenExeConfiguration的调用是在已编译的.dll中,您需要覆盖它以使其行为不同吗?

你不能。有人会编译一个只能在非网络环境中运行的库,这似乎很奇怪,除非他们排除了以任何其他方式使用它的可能性。

这是一个很长的镜头,但您可以尝试使用JetBrains dotPeek进行反编译。它可以导出一个可以编辑和重新编译的新Visual Studio项目。当我要么没有源代码或者不确定它是正确的源代码时,我必须这样做。

在反编译和浏览过程中,您甚至可以找到另一种加载配置设置的方法。