使用第三方程序集时,我需要一种方法来检测它们是否需要完整的 .NET 4 或仅需要 .NET 4 客户端配置文件。
我已经看到其他方法来检测引用的 .NET 版本确定 dll 的 .NET Framework 版本,但该问题中概述的方法并未显示如何检测客户端配置文件与完整。是否可以?
我正在寻找任何解决方案,它不一定是代码/运行时解决方案。
使用第三方程序集时,我需要一种方法来检测它们是否需要完整的 .NET 4 或仅需要 .NET 4 客户端配置文件。
我已经看到其他方法来检测引用的 .NET 版本确定 dll 的 .NET Framework 版本,但该问题中概述的方法并未显示如何检测客户端配置文件与完整。是否可以?
我正在寻找任何解决方案,它不一定是代码/运行时解决方案。
请注意,以下解决方案特定于 .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)。你的来电。