Tag: 条件编译

是否会在发布版本中评估提供给Debug.Assert的表达式?

说我有一个相当昂贵的断言: bool IsCompatible(Object x, Object y) { // do expensive stuff here } 如果我用以下方法测试这个断言: Debug.Assert(IsCompatible(x,y)); IsCompatible是否会在发布版本中执行? 我的理解是Debug.Assert标记为[Conditional(“DEBUG”)],对它的调用只会在调试版本中发出。 我认为这不会阻止表达式在发布模式下进行评估,因为方法调用可能有副作用,只会将结果传递给Debug.Assert。 那是对的吗? 我应该这样做: #if DEBUG Debug.Assert(IsCompatible(x,y)); #endif 为了确保我不在发布模式下支付IsCompatible的费用?

条件DEBUG – 它是否仍然编译成RELEASE代码?

我知道如果我将代码标记为DEBUG代码,它将不会在RELEASE模式下运行 ,但它是否仍然被编译成程序集? 我只是想通过额外的方法确保我的assembly不会膨胀。 [Conditional(DEBUG)] private void DoSomeLocalDebugging() { //debugging }

未定义条件编译符号

我无法让Visual Studio按照我的预期行事。 我创建了2个配置文件。 一个定义了符号FOO,另一个定义了符号BAR。 我有这个代码: static class MyClass{ #if FOO public static string const MyData=”foo defined”; #endif #if BAR /*yes, I know #elif would work here too.. just trying to be simple*/ public static string const MyData=”bar defined”; #endif } 然后在我的另一个文件中 if(MyClass.MyData==”foo defined”)….. 好吧,在我的应用程序中,我收到一个错误,即没有定义MyClass.MyData。 另外,如果我在FOO配置文件中有它并在#if FOO之后键入#error test类的东西那么它会有一个构建错误,但如果我删除它会构建得很好并且当我去运行它时我会’ ll得到一个编译错误,MyClass不包含MyData的定义。 此外,这是一个ASP.Net Web应用程序。 有人可以帮我弄清楚如何使用条件编译吗? 它就好像Visual Studio使用编译符号正确编译它一样,但是每当ASP.Net网络服务器执行它时,它都会重新编译它而没有任何符号……但这只是没有任何意义,为什么它会这样做.. 编辑:如果我使用FOO或BAR配置文件并不重要,它们似乎都没有像它们那样定义MyData符号。 EDIT2: […]

在C#中有一种简单的方法可以根据操作系统版本获得条件编译符号

我有一堆unit testing需要基于Windows操作系统版本进行条件编译。 此unit testing正在测试仅在Windows Vista及更高版本中可用的TxF。 #if WIN_OS_VERSION >= 6.0 // Run unit tests #endif

.NET 4的条件编译

可能重复: 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

条件属性如何工作?

我有一些标有[Conditional(“XXX”)]辅助方法。 目的是在仅存在XXX条件编译符号时使方法有条件地编译。 我们使用它来调试和跟踪function,它运行良好。 在我研究条件编译如何工作的过程中,我发现有几个来源说明用Conditional属性标记的方法将放在IL中,但是不会执行对方法的调用。 代码如何编译成IL而不执行? 如何validation行为实际上是如上所述? 我在IL方面做得不多,所以我的技能在这个方面都很弱。

C#中条件编译的替代方案

在C#中使用条件编译代码的替代方法是什么? 我有一个类,有很多基于#ifdef的代码..过了一段时间我的代码是不可读的。 寻找重构技术,以便使用许多#if defs来提高代码的可读性和维护性

如果汇编存在,则为C#条件编译

我有一个项目的参考可能存在,也可能不存在。 我有使用该引用的代码,我只想在程序集存在时编译它。 我正在考虑以下几点: #if ASSEMBLY_EXISTS AssemblyClass.DoSomething(); #endif 我可以根据需要将#define放在顶部并注释/取消注释,但我更愿意,如果没有我的手动干预,它可能只是知道它是否在那里,这让我相信#if不适用于这种情况。 是否存在另一种基于程序集是否存在而有条件地编译的方法?

是否可以有条件地编译到.NET Framework版本?

我可以回想一下,在使用MFC时,您可以通过检查_MFC_VER宏来支持多个版本的MFC框架。 我现在正在使用.NET 4做一些事情,并希望在几个地方使用Tuple,但仍然保持其他所有3.5兼容。 我想做点什么: #if DOTNET4 public Tuple SomeMethod(){…} #else public KeyValuePair SomeMethod(){…} #endif

C#中不同文件的预处理程序指令

我知道我可以在C#使用预处理程序指令来启用/禁用某些代码的编译。 如果我在同一个文件中定义一个指令,它可以正常工作: #define LINQ_ENABLED using System; using System.Collections.Generic; #if LINQ_ENABLED using System.Linq; #endif 现在,我在C++中使用将所有这些配置指令放在单个头文件中,并将其包含在我需要这些指令的所有文件中。 如果我在C#做同样的事情则不起作用: //Config.cs #define LINQ_ENABLED //MyClass.cs #define LINQ_ENABLED using System; using System.Collections.Generic; #if LINQ_ENABLED using System.Linq; #endif 我也尝试了以下但似乎我无法在命名空间内定义指令: //Config.cs namespace Conf{ #define LINQ_ENABLED } //MyClass.cs #define LINQ_ENABLED using System; using System.Collections.Generic; using Conf; #if LINQ_ENABLED using System.Linq; #endif 我究竟做错了什么? 在C#跨不同文件使用预处理器的正确方法是什么? 有没有更好的方法呢?