如果目标框架是较新版本,那么我的项目代码可能会有一些小的地方可以大大改进.我希望能够更好地利用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)
更新:我的问题是人们如何处理这种情况?你在创造不同的配置吗?您是否通过命令行传递常量?
我想在C#而不是C++中进行以下操作
#ifdef _DEBUG
bool bypassCheck=TRUE_OR_FALSE;//i will decide depending on what i am debugging
#else
bool bypassCheck = false; //NEVER bypass it
#endif
Run Code Online (Sandbox Code Playgroud) 我有一些使用扩展方法的代码,但是使用VS2008中的编译器在.NET 2.0下编译.为了促进这一点,我不得不声明ExtensionAttribute:
/// <summary>
/// ExtensionAttribute is required to define extension methods under .NET 2.0
/// </summary>
public sealed class ExtensionAttribute : Attribute
{
}
Run Code Online (Sandbox Code Playgroud)
但是,我现在想要包含该类的库也可以在.NET 3.0,3.5和4.0下编译 - 没有'ExtensionAttribute在多个地方定义'警告.
当目标框架版本是.NET 2时,是否有任何编译时指令可用于仅包含ExtensionAttribute?
无论如何#define Constant在Visual Studio解决方案基础上?
可以在csproject的基础上定义一个常量,并且可以放入#define constantcs文件,但是我想知道是否可以在vs sln的基础上定义它?
我可以回想一下,在使用MFC时,您可以通过检查_MFC_VER宏来支持多个版本的MFC框架.
我现在正在使用.NET 4做一些事情,并希望在几个地方使用Tuple,但仍然保持其他一切3.5兼容.
我想做的事情如下:
#if DOTNET4
public Tuple<TSource, TResult> SomeMethod<TSource, TResult>(){...}
#else
public KeyValuePair<TSource, TResult> SomeMethod<TSource, TResult>(){...}
#endif
Run Code Online (Sandbox Code Playgroud) 对不起,如果我的术语错了.我#if TEST_APP在我的代码中写道.现在我想定义TEST_APP.我如何使用visual studios 2010进行设置?这是一个Windows窗体应用程序.
如果您能告诉我在winform项目和Web项目中设置的符号的名称,可以获得奖励
可能重复:
C#条件编译和框架目标
我有一些代码在.NET 4中工作,但在.NET 3.5中不起作用,在.NET 3.5中它需要使用对Windows的互操作调用.
我想在两种情况下使用"ifdef"来使用不同的代码路径(最终我将弃用.NET 3.5代码).
是否有预定义的指令值来确定何时使用.NET4编译代码?是否有与所有预定义指令(DEBUG,TRACE,...)的良好链接?以下链接仅提供指令,但不提供标准预定义值:
http://msdn.microsoft.com/en-us/library/ed8yd1ha(v=VS.100).aspx