2012-01-31 41 views
2

我有一個使用Crystal Reports的.NET應用程序。其中一個已經持有我回來從升級到.NET 4.0的大事情是,Crystal Reports將不會在app.config文件中沒有以下行工作:在運行時調用ICLRRuntimeInfo.BindAsLegacyV2Runtime的危險

<startup useLegacyV2RuntimeActivationPolicy="true"> 
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/> 
</startup> 

的問題是,在app.config文件包含各種其他配置選項,因此它不能被覆蓋。並且手動更新每個客戶端PC是不可能的。

即使我確實知道如何準確地更新文件,我不喜歡讓這些東西永久坐在那裏。例如,如果我們有一天想要轉到.NET 5.0,那就意味着要從每個配置文件中刪除version =「v4.0」行。

我不明白爲什麼微軟會將這種配置放在app.config文件中,而不是清單文件或類似的東西,它可以直接嵌入到可執行文件中。

無論如何,我終於發現有人誰給的如何在運行時,而不是在配置文件中配置設置的例子:

http://reedcopsey.com/2011/09/15/setting-uselegacyv2runtimeactivationpolicy-at-runtime/

那麼究竟什麼是設置運行時性能的危險以編程方式通過ICLRRuntimeInfo.BindAsLegacyV2Runtime()?有沒有可能ICLRRuntimeInfo上的Guid會隨着某些.NET服務包或其他什麼而改變?

我很難想象這可能會導致問題的發生,並且將它從可執行文件中取出要比嘗試更新所有已存在的app.config文件要容易得多。那麼潛在的缺點是什麼?

回答

0

app.config是應該與您的可執行文件和所有其他相關的內容文件一起更新的東西。你可以這樣做。有一些只有運行時方法可用的程序集。