我在C#.net中创建了一个项目,其中引用了第三方程序集。 但是当客户机器中的组件版本随着复制版本而变化时,有时无法加载组件。
所以我想通过在app.config文件中使用“bindingRedirect”元素“newversion”标记来重定向到新版本的程序集。
如何在app中写入“bindingRedirect”元素。在运行时配置文件。
抱歉,我认为我的问题不明确。我的问题是我只会在运行时知道程序集的新版本#。所以,我想以编程方式更改新版本。我该怎么做?
感谢您的回复。
答案 0 :(得分:0)
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="clsLibVsn"
publicKeyToken="b035c4774706cc72"
culture="neutral"/>
<bindingRedirect oldVersion= "1.1.1830.10493"
newVersion= "1.0.1830.10461"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
答案 1 :(得分:0)
这里的问题是,由于其性质,程序集绑定信息是使用AppDomain加载的。
因此,为了能够在运行时更改程序集绑定行为,需要重新启动AppDomain以重新加载配置。 一旦将dll加载到AppDomain中,就无法卸载它,因此需要重新启动它以加载一组新的DLL,这些DLL模拟不同的版本(重定向)。
您需要将应用程序隔离到两个AppDomain中,启动AppDomain(bootstrapper),它只能用于监视和编辑配置文件,以及'worker'AppDomain,修改后的app.config将应用于该域;并且为您的申请做了所有工作。
如果您希望能够让您的应用程序神奇地更改重定向行为而无需重新初始化应用程序的任何部分,那么遗憾的是,这是不可能的。
但是,我已经实现了我最近在应用程序中描述的上述方法,并且它完美地运行。需要注意的是,应用程序中应用这些“隔离绑定重定向”的部分必须在进行配置更改时重新初始化。