Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何获取目标.NET Framework的版本?_C#_.net - Fatal编程技术网

C# 如何获取目标.NET Framework的版本?

C# 如何获取目标.NET Framework的版本?,c#,.net,C#,.net,我如何获得目标.NET Framework的版本,而不是应用程序当前运行的.NET Framework的版本 例如,如果应用程序的目标是.NET Framework 4.5,我需要知道我的目标是.NET Framework 4.5 例如,检查System.Environment.Version: 针对.NET Framework 4时:4.0.30319.18502 针对.NET Framework 4.5时:4.0.30319.18502 所以这不起作用 真正的目标是努力解决问题。这很简单

我如何获得目标.NET Framework的版本,而不是应用程序当前运行的.NET Framework的版本

例如,如果应用程序的目标是.NET Framework 4.5,我需要知道我的目标是.NET Framework 4.5

例如,检查
System.Environment.Version

  • 针对.NET Framework 4时:
    4.0.30319.18502
  • 针对.NET Framework 4.5时:
    4.0.30319.18502
所以这不起作用

真正的目标是努力解决问题。

这很简单-检查:


是什么阻止您使用普通的
/define

csc/define:NET45/optimize/out:MyProgram.exe*.cs


这个问题没有多大意义。如果您的程序是使用.NET Framework 4.5编译的,但从未使用过
动态
异步
,或任何其他.NET Framework 4.5特定功能,理论上您可以在.NET Framework 3.5上运行它,而无需修改。但这又有什么关系呢?您是否试图使用
动态
编写程序,但能够将其编译为不使用
动态
的备用3.5版本?也许是在简化功能模式下?这有帮助吗@马修沃森:那是在运行时,而不是编译时。这有帮助吗@蒂姆斯。“在编译时检测目标框架版本”这个问题正是我想要的!不幸的是,没有解决方案(除了要求使用共享代码的人修改他们的解决方案),这只在运行时有效,而不是在编译时。参考OP的最后一句话,他说他正在寻找编译器定义。@RobertHarvey那又怎样?OP可以使用一个简单的if-else语句来解决这个问题。我没有看到任何地方提到它应该是编译时的,如果它需要是编译时的,那么正如Tim建议的,条件编译参数将有助于我了解代码现在在做什么。起初我认为它使用的是4.5特定的代码。现在我意识到它实际上是在问大会它的目标是什么。虽然这不会以任何性能关键的方式帮助我解决问题,但它绝对回答了我的问题。(知道它是.NET 4.5,我可以使用反射来调用我需要的方法。是的,反射要慢几个数量级,但至少可以工作)。嗯,我认为这个类在.NET 4.0中是新的,所以我认为在.NET 4.0之前不能使用它:(幸运的是,我现在处理的仅有两个项目是4。还有一个我可以更新到4.5。但这意味着我不能只是按原样签入代码更改;因为有些人以.NET 2或3/3.5为目标,因为我无法访问该项目。这是共享代码,可以在以.NET 2、.NET 3、.NET 3.5、.NE为目标的项目中运行。)T 4、.NET 4.5、.NET 1、.NET n+1通过检查
TargetFrameworkVersion
@IanBoyd可以有条件地包括引用。@IanBoyd:只要让编译代码的人在csc命令行上使用适当的
/define
来编译它。@IanBoyd也许你应该解释一下你当前的代码是什么用例(我的意思是,谁拥有/编译代码,为什么需要获得框架版本…等等),因为现在还不清楚您是在寻找编译时还是运行时解决方案。
var targetFrameworkAttribute = Assembly.GetExecutingAssembly()
    .GetCustomAttributes(typeof(System.Runtime.Versioning.TargetFrameworkAttribute), false)
    .SingleOrDefault();
using System;
public class Test 
{
    public static void Main() 
    {
        #if (NET45) 
            Console.WriteLine("NET45 targeted");
        #else
            Console.WriteLine("NET45 not targeted");
        #endif
    }
}