gpt4 book ai didi

.net - 从 .Net 程序集检索目标框架版本和目标框架配置文件

转载 作者:行者123 更新时间:2023-12-03 14:53:36 27 4
gpt4 key购买 nike

有什么方法可以访问在编译 .Net 程序集时用于 TargetFrameworkVersion 和/或 TargetFrameworkProfile 的值?
我所说的值是项目文件中包含的值

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<OtherStuff />
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
<TargetFrameworkProfile>Client</TargetFrameworkProfile>
<OtherStuff />
</PropertyGroup>
<OtherStuff>
</OtherStuff>
</Project>
基本上,我想找出编译程序集时框架的目标版本是什么,如果可能的话,还要找出目标框架配置文件。
我不是在谈论当前加载的 CLR 版本, Environment.Version不是我所追求的。
理想情况下,该解决方案将使用 System.Reflection,但如果我不得不求助于其他方法,我会这样做。

最佳答案

如果您对 的版本感到满意CLR 编译程序集,您可以使用 Assembly.ImageRuntimeVersion 属性(property)。根据 MSDN,该属性:

representing the version of the common language runtime (CLR) saved in the file containing the manifest.





By default, ImageRuntimeVersion is set to the version of the CLR used to build the assembly. However, it might have been set to another value at compile time.



当然,这并没有为您提供 .NET Framework 的特定版本(例如:.NET Frameworks 2、3.0 和 3.5 都在 2.0 CLR 上)。

如果 CLR 版本不够,您可以尝试根据它引用的程序集“估计”(智能猜测)它必须是什么版本。对于 .NET 1 和 4,CLR 版本应该足够了。但是,如果 CLR 版本是 2.0,您将不知道这意味着 2.0、3.0 还是 3.5,因此您可以尝试更多逻辑。例如,如果您看到程序集引用了 System.Core (使用 Assembly.GetReferencedAssemblies() )然后你会知道版本是 3.5,因为 System.Core是 3.5 中的新功能。这并不完全是坚如磐石,因为有问题的程序集可能不使用程序集中的任何类型,因此您将无法捕捉到这一点。要 try catch 更多案例,您可以遍历所有引用的程序集并检查它们的版本号 - 可能只过滤以 System 开头的程序集,以避免与其他库的误报。如果您看到任何引用的 System.* 程序集的版本为 3.5.x.x,那么您也可以确定它是为 3.5 构建的。

正如您所注意到的,我不相信 TargetFrameworkProfile逃过 Visual Studio。但是,如果恰好有应用程序的 app.config 文件,Visual Studio 可能已将目标框架放入其中。例如,如果您将项目设置为使用 4.0 客户端配置文件,Visual Studio 会创建一个 app.config,如下所示:
<?xml version="1.0"?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0,Profile=Client"/>
</startup>
</configuration>

关于.net - 从 .Net 程序集检索目标框架版本和目标框架配置文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6854664/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com