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

标签 .net dll .net-4.0 .net-client-profile

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

我已经看到其他方法来检测引用的 .NET 版本 Determine .NET Framework version for dll但该问题中概述的方法并未显示如何检测 Client Profile vs Full。是否可以?

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

最佳答案

请注意 以下解决方案特定于 .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();
    }
}

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

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

关于.net - 如何确定 DLL 是否需要完整的 .NET 4 或仅客户端配置文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11208208/

相关文章:

c++ - Qt 5.2 DLL 返回与调用 DLL 的应用程序不同的结果

c# - HttpResponseMessage 和 HttpWebResponse 有什么区别?

c++ - 这可能是误报的内存泄漏报告吗?

C++,在枚举加载的模块时找不到加载的 C# DLL

c# - 设置为最大化的 WinForm 在循环中出现得太早

c# - 使用 AllocConsole() 和编码时出现问题

c# - 在具有相同签名的.Net 3.5 中实现 Expression.Assign?

c# - 如何在 WP7 上以分钟为单位获取时区偏移量?

c# - 在另一个窗口之上叠加一个顶层窗口

.net - 2个有效请求然后超时