与.NET 4.0相比,如何识别已使用/ for .NET 4.5编译程序集?

时间:2014-01-09 09:08:10

标签: .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构建的?

this blog post by Marc Gravell显而易见, 在这些程序集的构建方式上存在差异,即使我们实际上可能没有特别使用任何.NET 4.5程序集/功能。

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

// Metadata version: v4.0.30319

我尝试启动仅安装了.NET 4.0的应用程序Windows 7,它启动了,但是如果找出所有的唯一方法是通过测试所有内容 ,然后我宁愿再尝试一下,看看它是否先用正确的版本构建。

这可能吗?

2 个答案:

答案 0 :(得分:16)

运行ildasm.exe并查看清单。您会看到TargetFrameworkAttribute

.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

CLR使用此属性来验证计算机上是否存在正确的版本,prompting the user如果不是,则自动安装它。

答案 1 :(得分:0)

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

  

代版本号

     

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