如何识别程序集是使用/for.NET 4.5编译的,而不是使用.NET 4.0编译的?

如何识别程序集是使用/for.NET 4.5编译的,而不是使用.NET 4.0编译的?,.net,.net-4.0,assemblies,.net-4.5,.net,.net 4.0,Assemblies,.net 4.5,我有一些构建代理正在通过TeamCity设置为我们构建.NET代码,我开始怀疑,尽管有项目设置,他们是否正在输出.NET 4.5构建的程序集。我的怀疑来自这样一个事实,即我不知道Windows 2012 Server是否附带了.NET 4.5或4.0,因此也不知道它是否曾经只有4.0或任何4.0程序集可用 如何查看磁盘上的程序集并确定它是使用.NET 4.0还是4.5构建的 从中可以明显看出,这些程序集的构建方式存在差异,即使我们实际上可能没有专门使用任何.NET 4.5程序集/功能 我尝试在程

我有一些构建代理正在通过TeamCity设置为我们构建.NET代码,我开始怀疑,尽管有项目设置,他们是否正在输出.NET 4.5构建的程序集。我的怀疑来自这样一个事实,即我不知道Windows 2012 Server是否附带了.NET 4.5或4.0,因此也不知道它是否曾经只有4.0或任何4.0程序集可用

如何查看磁盘上的程序集并确定它是使用.NET 4.0还是4.5构建的

从中可以明显看出,这些程序集的构建方式存在差异,即使我们实际上可能没有专门使用任何.NET 4.5程序集/功能

我尝试在程序集上使用ILDASM,但已知的.NET 4.5(.1)控制台应用程序上的元数据引用仍然显示为4.0:

// Metadata version: v4.0.30319
我试着在只安装了.NET 4.0的情况下启动应用程序Windows 7,但如果要确定一切是否正常的唯一方法是测试一切,那么我宁愿尝试更多,看看它是否首先使用正确的版本构建


那么这可能吗?

运行ildasm.exe并查看清单。您将看到:


CLR使用此属性验证计算机上是否存在正确的版本,如果没有,则自动安装。

元数据版本
v4.0.30319
适用于.Net 4.0。见:

生成版本号

1.0-1.0.3705

1.1-1.1.4322.573

2.0-2.0.50727.42

3.0-3.0.4506.30

3.5-3.5.21022.8

4.0-4.0.30319.1

4.5-4.5.50709.17929

4.5.1-4.5.50938.18408


对我来说太快了!:D添加了指向我的MSDN的链接。谢谢,然后它会按照现在的配置生成4.0程序集。还有一个问题:)我也在中运行了这一行:
Assembly.LoadFrom(@“d:\dev\vs.net\app451\app451\bin\debug\app451.exe”).GetCustomAttributes(typeof(TargetFrameworkAttribute)).Dump()并生成程序集版本。TargetFramework不会告诉您DLL需要什么版本。它只告诉你目标是什么。如果没有安装引用程序集,您可能会认为4.0目标依赖于4.0,而实际上它们依赖于v.whater,其中“whater”是msbuild找到的第一个.NET DLL。对于.NET 4.5.1控制台应用程序,ildasm清单顶部的元数据行也读取4.0.30319,因此我的问题是。@HansPassant的答案给了我答案。你所指的页面(“”)根本没有说“版本号”(甚至是“版本号”)。和版本中也有类似的数字(例如“4.5.50938.18408”),但它们并不是说这些值与元数据版本相关。
.custom instance void [mscorlib]System.Runtime.Versioning.TargetFrameworkAttribute::.ctor(string) = 
( 01 00 1A 2E 4E 45 54 46 72 61 6D 65 77 6F 72 6B   // ....NETFramework
  2C 56 65 72 73 69 6F 6E 3D 76 34 2E 35 01 00 54   // ,Version=v4.5..T
  0E 14 46 72 61 6D 65 77 6F 72 6B 44 69 73 70 6C   // ..FrameworkDispl
  61 79 4E 61 6D 65 12 2E 4E 45 54 20 46 72 61 6D   // ayName..NET Fram
  65 77 6F 72 6B 20 34 2E 35 )                      // ework 4.5