0

我有以下代码(从承包商继承):

public partial class StoredProcedures  
{  
    #if NO_THREAD      
        readonly static String version = "XXXX, Version 1.02, Apr/29/2010";
    #else 
        readonly static String version = "XXXX, Version 0.93, Dec/21/2006";
    #endif

我似乎在其他任何地方都找不到 NO_THREAD 。这是作为 SQL 程序集编译和安装的代码。它是特别的还是我错过了一些简单的东西?

4

6 回答 6

4

尝试检查项目属性->构建->常规->条件编译符号,以查看您为项目拥有的所有构建配置,它可能在那里。

于 2012-08-28T23:04:52.367 回答
1

寻找#define声明。请参阅#if 预处理器条件的文档:http: //msdn.microsoft.com/en-us/library/4y6tbswk.aspx

于 2012-08-28T23:01:50.603 回答
1

如果找不到

define #NO_THREAD

在代码中的任何地方,这可能是因为承包商通过传递 /define 编译器选项来定义符号。

有关更多详细信息,请参见此处(从单元格中键入,对格式表示抱歉):

http://msdn.microsoft.com/en-us/library/0feaad6z.aspx

于 2012-08-28T23:02:03.297 回答
0

您可能应该看看 c#预处理器指令

No_Thread这是一个可以通过 using 定义的符号,#define No_Thread#define No_Thread存在时#if NO_THREAD将导致 true 并且在编译时将编译readonly static String version = "XXXX, Version 1.02, Apr/29/2010";此语句,否则将编译下一条语句。

这通常用于区分调试版本和发布版本。您是否注意到创建新项目时 VS 中有 2 个版本。如果你在代码的某个地方写了这样的东西

 #if DEBUG
 Console.WriteLine("DEBUG VERSION");
 #endif

那么该字符串"DEBUG VERSION"只会在项目处于调试模式时打印在控制台上,因为DEBUG如果您使用#define预处理器手动执行此操作,VS 会插入一个符号,那么该行也将被编译

于 2012-08-28T23:02:14.487 回答
0

NO_THREAD是条件编译的符号。

它可以来自#define NO_THREAD项目文件,或来自 nant 文件(或您用于构建的任何方法)。

如果已定义,则第一行代码将计为 C# 代码的一部分。如果不是,那么第二个是。

如果这是唯一发生的情况,我会说这是移除某些东西的后遗症,但是如果您习惯使用 Visual Studio 进行构建,那么请确保没有用于 nant 的构建文件,以防以前的开发人员使用它反而。

于 2012-08-28T23:02:20.107 回答
0

这是一个条件编译符号。在 Visual Studio 2010 中,它们出现在项目属性的生成页面的条件编译符号文本框中。可能您的配置管理器配置之一包含此符号或在过去的某个时间点包含此符号。据推测,如果存在 NO_THREAD 符号,则另一个#if地方会禁用使用多个线程的代码块。

于 2012-08-28T23:02:32.800 回答