如果目标框架是较新版本,那么我的项目代码可能会有一些小的地方可以大大改进.我希望能够更好地利用C#中的条件编译来根据需要切换它们.
就像是:
#if NET40
using FooXX = Foo40;
#elif NET35
using FooXX = Foo35;
#else NET20
using FooXX = Foo20;
#endif
Run Code Online (Sandbox Code Playgroud)
这些符号中的任何一个都是免费的吗?我是否需要将这些符号作为项目配置的一部分注入?看起来很容易,因为我知道哪个框架是MSBuild的目标.
/p:DefineConstants="NET40"
Run Code Online (Sandbox Code Playgroud)
更新:我的问题是人们如何处理这种情况?你在创造不同的配置吗?您是否通过命令行传递常量?
我们的应用程序是使用VS 2008构建的,使用Linq并将Target Framework设置为.NET Framework3.5.
当只在机器上安装.NET 3.5或4时,它可以正常工作.
但是,在安装了.NET 2(或3.0)和.NET 4的计算机上,应用程序加载了.NET 2,并在访问Linq时崩溃,因为它查找.NET 3.5库.
在app.config中使用标签似乎没有帮助,因为它指定了CLR版本,在.NET 3.5的情况下为2.
请注意,我们的安装会验证是否已安装.NET 3.5或更高版本.
有没有办法告诉应用程序加载:
(请注意,在Element文档的Community Content部分中仍未回答类似的问题)
我正在尝试实现此处描述的解决方案:我可以在面向.NET 3.5 SP1时使用.NET 4功能吗?.当.NET 3.5应用程序在.NET 4.0上运行时,它可以正常工作.但是,在.NET 4.5上,该应用程序在.NET 3.5环境中运行.我尝试过以下方法:
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5"/>
<supportedRuntime version="v4.0"/>
<supportedRuntime version="v2.0.50727"/>
Run Code Online (Sandbox Code Playgroud)
没有成功.Environment.Version仍然告诉我2.0.50727.5456在.NET 4.0上一切正常.
有没有办法强制.NET 3.5应用程序使用.NET 4.5(如果可用)?