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

问题描述 投票:0回答:1

我有一个使用 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文件中,而不是清单文件或类似的东西,可以直接嵌入到可执行文件中。

无论如何,我终于找到了一个人,他给出了如何在运行时而不是在配置文件中配置该设置的示例:

https://web.archive.org/web/20230128073937/http://reedcopsey.com/2011/09/15/setting-uselegacyv2runtimeactivationpolicy-at-runtime/

那么通过 ICLRRuntimeInfo.BindAsLegacyV2Runtime() 以编程方式设置运行时属性到底有什么危险? ICLRRuntimeInfo 上的 Guid 是否有可能因某些 .NET 服务包或其他内容而改变?

我很难想象这会导致什么样的问题,而且将其从可执行文件中取出比尝试更新所有已存在的 app.config 文件要容易得多。那么潜在的缺点是什么?

.net .net-4.0 runtime app-config
1个回答
0
投票

app.config 应该与可执行文件和所有其他相关内容文件一起更新。无论哪种方式你都可以做到。有些程序集仅适用于运行时方法。

© www.soinside.com 2019 - 2024. All rights reserved.