在C# Visual Studio中如何定义预处理器符号?

21
我在我的代码中写了#if TEST_APP。现在我想定义TEST_APP。我如何在Visual Studio 2010中设置它?这是一个Windows Forms应用程序。
在Windows Forms项目和Web项目中设置的符号名称是什么?
4个回答

35
在Visual Studio中,右键单击项目并点击“属性”以打开解决方案资源管理器。打开“生成”选项卡,您将看到一个名为“条件编译符号”的字段。这是一个逗号分隔的列表,或者以空格分隔。
还有两个常用符号的复选框,DEBUG和TRACE。
对于您的Web项目,您可以将该字段设置为“WEB_PROJECT”,对于Windows Forms项目,您可以将其设置为“WINFORMS_PROJECT”。

4
您还可以直接在项目文件(*.csproj)中设置这些内容,例如在PropertyGroup内添加<DefineConstants>DEBUG;TRACE</DefineConstants> - Jeyenne

8
在项目属性页面的“生成”选项卡中,查找“条件编译符号”设置。
我认为默认情况下,Web应用程序和WinForm应用程序没有定义任何不同的符号。请注意,这是针对项目本身设置的,不会影响任何类库 - 因此,我期望项目内的任何代码都应该知道它是否在Windows应用程序中。您想使用这个做什么?

在编写了APP_TEST -dAPP_TEST(我在想gcc)之后失败,并在看到这些答案后,我意识到我引用了我的Web库而不是包含我的文件。 噢。 那是当我尝试让F#和C#在同一个部分类中定义方法时。 - user34537
我不需要定义应用程序和网页,我只是在想既然我知道C ++可以做到,那么我在测试一些后端代码时,我可以在应用程序中即时修改它,但在Web应用程序中我无法这样做(在以下情况下不允许更改。调试器附加到已经运行的进程)。 - user34537
我们在Web应用程序中使用它来启用调试缓存。在发布中启用了缓存逻辑,在调试中禁用了缓存逻辑,但有时您想测试缓存逻辑(在调试中)。为此,额外的条件非常方便。(DEBUG | DEBUG_WITH_CACHE) - bob

0

方法一:

#define TEST_APP true
#if TEST_APP == true
#endif

方法二:

#define TEST_APP
#if defined(TEST_APP)
#endif

来源:MSDN


你确定你说的是C#而不是C++吗?根据这个链接 https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/preprocessor-directives,C#不支持为定义的符号赋值。 - C-F

0
如果您需要让条件编译动态地反映构建或环境条件,请查看我在StackOverflow上对如何设置条件编译变量的回答。我展示了如何基于环境条件(例如C#语言版本)启用条件编译,以便您可以编写像这样的代码:
#if CSHARP7
    ref T pi = ref rg[i], pj = ref rg[j];
    var t = pi;                    // swap elements: managed pointers
    pi = pj;
    pj = t;
#else
    var t = rg[i];                 // swap elements: clunky
    rg[i] = rg[j];
    rg[j] = t;
#endif

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接