我有一些使用扩展方法的代码,但是使用VS2008中的编译器在.NET 2.0下进行编译。为方便起见,我必须声明ExtensionAttribute:
/// <summary> /// ExtensionAttribute is required to define extension methods under .NET 2.0 /// </summary> public sealed class ExtensionAttribute : Attribute { }
但是,我现在希望包含该类的库也可以在.NET 3.0、3.5和4.0下进行编译-无需发出“在多个位置定义了ExtensionAttribute”警告。
当目标框架版本为.NET 2时,是否可以使用任何编译时指令来仅包含ExtensionAttribute?
与“创建N个不同的配置”相关联的SO问题当然是一个选择,但是当我有此需要时,我只是添加了条件DefineConstants元素,因此在Debug | x86(例如)中,在DEFUG; TRACE的现有DefineConstants之后,我添加了这些2,检查csproj文件的第一个PropertyGroup中设置的TFV中的值。
<DefineConstants Condition=" '$(TargetFrameworkVersion)' == 'v4.0' ">RUNNING_ON_4</DefineConstants> <DefineConstants Condition=" '$(TargetFrameworkVersion)' != 'v4.0' ">NOT_RUNNING_ON_4</DefineConstants>
显然,您不需要两者,但是只是在这里给出了eq和ne行为的示例-#else和#elif也可以正常工作:)
class Program { static void Main(string[] args) { #if RUNNING_ON_4 Console.WriteLine("RUNNING_ON_4 was set"); #endif #if NOT_RUNNING_ON_4 Console.WriteLine("NOT_RUNNING_ON_4 was set"); #endif } }
然后,我可以在目标3.5和4.0之间切换,它将做正确的事。