正在运行的应用程序中确定.net framework版本
(编辑) 为什么即使我更改了项目的目标版本,AssemblyName.Version也会报告相同的版本?如何确定框架的实际执行版本 这始终返回4.0.0.0正在运行的应用程序中确定.net framework版本,.net,windows,frameworks,version,.net-assembly,.net,Windows,Frameworks,Version,.net Assembly,(编辑) 为什么即使我更改了项目的目标版本,AssemblyName.Version也会报告相同的版本?如何确定框架的实际执行版本 这始终返回4.0.0.0 foreach (var assembly in AppDomain.CurrentDomain.GetAssemblies()) { var aName = assembly.GetName(); Console.WriteLine($"{aName.Name} {aName
foreach (var assembly in AppDomain.CurrentDomain.GetAssemblies())
{
var aName = assembly.GetName();
Console.WriteLine($"{aName.Name} {aName.Version}" );
}
Microsoft检测.NET Framework运行时版本的官方示例如下: 更新: 事实证明,真正的问题与.NET Framework类使用的默认SSL/TLS协议集有关,如果在编译时根据某个框架版本编译程序集,则会触发不同的运行时行为 AppContext开关为
您还可以查看最佳实践文章以了解更多提示
试试这个:
private static string GetExecutingAssemblyTargetFramework()
{
string result = string.Empty;
System.Reflection.Assembly asm = System.Reflection.Assembly.GetExecutingAssembly();
System.Runtime.Versioning.TargetFrameworkAttribute targetFrameworkAttribute = asm.GetCustomAttributes(
typeof(System.Runtime.Versioning.TargetFrameworkAttribute), false).FirstOrDefault()
as System.Runtime.Versioning.TargetFrameworkAttribute;
if (targetFrameworkAttribute != null)
result = targetFrameworkAttribute.FrameworkDisplayName;
return result;
}
您也可以使用原始问题中的相同循环:
foreach (var assembly in AppDomain.CurrentDomain.GetAssemblies())
{
Console.WriteLine(GetAssemblyTargetFramework(assembly));
}
private static string GetAssemblyTargetFramework(System.Reflection.Assembly asm)
{
string result = string.Empty;
System.Runtime.Versioning.TargetFrameworkAttribute targetFrameworkAttribute = asm.GetCustomAttributes(
typeof(System.Runtime.Versioning.TargetFrameworkAttribute), false).FirstOrDefault()
as System.Runtime.Versioning.TargetFrameworkAttribute;
if (targetFrameworkAttribute != null)
result = targetFrameworkAttribute.FrameworkDisplayName;
return result;
}
这并没有回答我要问的问题。这回答了“安装了哪些版本?”的问题。我问的是“当前应用程序使用的是哪个版本?”请注意我帖子第一句中的斜体字。@elroyFlyn您的应用程序只能使用已安装的.NET Framework版本(因为.NET Framework 4.x使用就地升级)。这就是所谓的运行时版本。如果您需要其他版本号,请再次编辑您的问题。那么(的其他部分)是如何发生的当我以不同的framework版本为目标并在同一台计算机上运行时,我的应用程序会产生不同的结果?如前所述,我将目标从4.5更改为4.6并获得不同的行为。好吧,这是你真正的问题。Microsoft设计了兼容层,以假装你的应用程序运行在较旧的.NET framework版本上,这是如果您查看文档(如“兼容性开关”部分),就会知道这一点。根据您观察到的行为差异,有相应的解决方法。好的,我发现我最初的问题信息不充分。我接受您的回答。如果您可以编辑它,开始时说“许多.net版本都在进行升级,其中程序集继续报告原始版本值。要确定实际版本,请阅读注册表,如以下代码所示。“(对吗?)关于我真正的问题,当需要tls 1.2时,WebRequest失败,当目标fw<4.6 vs.4.6,运行在4.7.1上时,我还没有找到相关的兼容性切换,但仍在寻找。Thank.OP没有寻找TargetFramework,他在寻找当前正在执行的框架版本。Target framework是一个ind构建程序集所依据的框架,而不是当前执行程序集的框架。
foreach (var assembly in AppDomain.CurrentDomain.GetAssemblies())
{
Console.WriteLine(GetAssemblyTargetFramework(assembly));
}
private static string GetAssemblyTargetFramework(System.Reflection.Assembly asm)
{
string result = string.Empty;
System.Runtime.Versioning.TargetFrameworkAttribute targetFrameworkAttribute = asm.GetCustomAttributes(
typeof(System.Runtime.Versioning.TargetFrameworkAttribute), false).FirstOrDefault()
as System.Runtime.Versioning.TargetFrameworkAttribute;
if (targetFrameworkAttribute != null)
result = targetFrameworkAttribute.FrameworkDisplayName;
return result;
}