如何确定DLL是需要完整的.NET 4还是仅需要客户端配置文件

Eva*_*van 5 .net dll .net-4.0 .net-client-profile

使用第三方程序集时,我需要一种方法来检测它们是需要完整的.NET 4还是仅需要.NET 4 Client Profile.

我已经看到了其他方法来检测.NET引用的.NET版本确定dll的.NET Framework版本,但该问题中概述的方法没有显示如何检测Client Profile vs Full.可能吗?

我正在寻找任何解决方案,它不一定是代码/运行时解决方案.

Ada*_*rth 2

请注意,下面的解决方案特定于 .NET 4.0 框架,它TargetFrameworkAttribue是 4.0 的新增内容。

我编译了两个应用程序,一个针对客户端框架,另一个针对完整的。我在 ildasm.exe 中打开它们,发现它们都有一个TargetFrameworkAttribute应用程序。您可以简单地使用反射来查看值:

using System;
using System.Linq;
using System.Runtime.Versioning;

class Program
{
    static void Main(string[] args)
    {
        var a = System.Reflection.Assembly.GetExecutingAssembly();
        var att = a.GetCustomAttributes(false).OfType<TargetFrameworkAttribute>().Single();

        Console.WriteLine(att.FrameworkDisplayName);
        Console.Read();
    }
}
Run Code Online (Sandbox Code Playgroud)

更新:确实是的,根据“.NET Framework 3.5 Client Profile”编译应用程序不包含该属性(代码无法再看到它,并且 ildasm 不包含该属性)。除了您链接的其他答案之外,我不知道如何在这种情况下确定目标框架。

为了避免对代码库施加我认为毫无意义的限制,我会让生活变得更轻松,并且只针对完整的框架。如果客户端有权安装客户端配置文件,那么完整框架也是如此 - 它只是稍微大一点(我发现一个消息来源说它只大了 15%,从而否定了“较小的客户端包”的大部分好处,41MB 而不是 48MB)。你的来电。