2009-11-09 71 views
1

我已经在C#.net中创建了一个项目,其中它引用了第三方程序集。 但当大会在客户的机器版本与copiled版本,它未能有时加载程序集变化。在app.config文件中写入bindingRedirect元素

所以我想通过在app.config文件中使用“bindingRedirect”元素“newversion”标签来重新指向程序集的新版本。

如何在应用程序中写入“bindingRedirect”元素。运行时配置文件。


对不起,我觉得我的问题不清楚。我的问题是我只会在运行时知道程序集的新版本号。所以,我想以编程方式更改新版本。我该怎么做呢?

感谢您的回复。

回答

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> 
+0

他要配置它的运行,而不是在配置文件中。 – 2009-12-01 23:28:47

0

这里的问题是,由于它的性质,程序集绑定信息被加载了AppDomain。

因此,为了能够在运行时更改程序集绑定行为,需要重新启动AppDomain以重新加载配置。 一旦一个DLL被加载到一个AppDomain中,它就不能被卸载,因此需要重新启动它来加载一组新的DLL,它们模拟不同的版本(重定向)。

您需要将应用程序分离为两个AppDomain,即启动AppDomain(bootstrapper),它仅用于监视和编辑配置文件,以及修改后的app.config将应用的'worker'AppDomain ,并为您的应用程序完成所有工作。

如果你期待能有您的应用程序只是幻化重定向行为,而不必重新初始化应用程序的任何部分,遗憾的是这不会是可能的。

但是,我已经实现了最近在应用程序中描述的上述方法,并且它完美地工作。需要说明的是在其中这些“分离的结合重定向”应用的应用,的部分必须被重新初始化的配置变化作出的任何时间。