2009-11-09 32 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 ,併爲您的應用程序完成所有工作。

如果你期待能有您的應用程序只是幻化重定向行爲,而不必重新初始化應用程序的任何部分,遺憾的是這不會是可能的。

但是,我已經實現了最近在應用程序中描述的上述方法,並且它完美地工作。需要說明的是在其中這些「分離的結合重定向」應用的應用,的部分必須被重新初始化的配置變化作出的任何時間。