在运行时调用ICLRRuntimeInfo.BindAsLegacyV2Runtime的危险

时间:2012-01-31 18:07:43

标签: .net .net-4.0 runtime app-config

我有一个使用Crystal Reports的.NET应用程序。从升级到.NET 4.0的一个重要原因是,如果没有app.config文件中的以下行,Crystal Reports将无法运行:

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

问题是app.config文件包含各种其他配置选项,因此不能覆盖它。并且手动更新每台客户端PC实际上是不可能的。

即使我弄清楚如何准确地更新文件100%,我也不喜欢让那些东西永久地存在。例如,如果我们有一天想要转到.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文件要容易得多。那么潜在的缺点是什么?

1 个答案:

答案 0 :(得分:0)

app.config应该与您的可执行文件和所有其他相关内容文件一起更新。你可以这样做。有一些程序集只有运行时方法可以工作。