Ben*_*oys 1 .net c# .net-4.5 .net-4.6
我有一个针对.NET Framework 4.6的应用程序
当我在只安装了.NET 4.5的机器上运行它时,它会启动,并且大部分工作正常...我只是得到了一些非常奇怪的无用的运行时错误,例如
"找不到方法:'!! 0 [] System.Array.Empty()'"
(其中包括)并不是很远,提醒我问题是.NET运行时.
我可以调用一个在启动时在.NET 4.5下不起作用的方法,捕获错误,并重新抛出一个有用的错误消息.在某些方面,这将是最具体的 - 只需检查我需要使用的函数,如果.NET的下一个版本有一个奇怪的无序版本号,测试$ expectedversion <= $ actualversion将会中断,而检查函数是否有效会没事的.
它只是感觉非常丑陋和凌乱.我不希望我的程序的启动例程必须做这种事情.它也很难测试,因为我的所有机器上都有.NET 4.6.
我可以检查注册表 - 除了注册表访问是4.5和4.6之间似乎已经发生变化的事实之外,我检查注册表设置的代码也会抛出无用的异常.我看到的注册表检查功能与已知的 .NET版本兼容,但具有非常特定的版本号,并且不会告诉我很多尚未存在的未知.NET版本.
那么 - 检查运行时环境是否与我编译的.NET版本相匹配的最佳方法是什么?
您可以<supportedRuntime>在app.config中使用标记,这将允许运行时提供更好的信息.
一个示例配置是;
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6" />
</startup>
</configuration>
Run Code Online (Sandbox Code Playgroud)