标签: conditional-compilation

条件属性

一个快速的C#问题,我想知道在我的项目> Properties> Build中,有一个检查"Define DEBUG constant",所以如果我检查然后执行此操作,

[Conditional(DEBUG)]
public static void Foo() {
      Console.WriteLine("Executed Foo");
}
Run Code Online (Sandbox Code Playgroud)

看到它不是"DEBUG"它的DEBUG常量.这样可以吗?或者我是否必须在项目设置中的条件编译符号中添加"DEBUG"?还是#define呢?

c# debugging conditional conditional-compilation visual-studio-2008

3
推荐指数
1
解决办法
1086
查看次数

Visual Studio C#项目:如何在.csproj中放置条件引用?

我工作的一个开源项目(Logbus-NG),我需要实现通过一个控制台应用程序在一个可行的方式催生了Web服务在Windows和Mono.

目前,由于MSDN杂志的教程,我在Windows上成功完成了这项工作.控制台应用程序可以生成自己的Web服务器,并实际打开外部的Web服务接口.问题是,这在Mono中不起作用,合理的是因为Mono bug.

与Mono开发聊天,他们建议我用Mono.XSP组件,使ASP.NET管道进入控制台应用程序,所以我想我会用不同的实现Web服务激活取决于配置.

现在的问题是:既然Mono.XSP可在GAC中的所有单分布(即使用时xbuild Linux下),但除非有人将它安装到GAC,我是不是在Windows中可用不想出货单. XSP与我的软件,也不强迫别人安装Mono,如果他们不需要它(即如果在Windows下编译),我可以设置Mono.XSP装配在GAC如果启用了MONO编译标志时,才会启用参考?如果启用此标志,我的代码显然会引用Mono.XSP代替HttpListenLibrary覆盖在上面链接的教程,参考将由编译正确使用.

先感谢您.

c# asp.net mono conditional-compilation visual-studio

3
推荐指数
1
解决办法
1776
查看次数

如何确保文档显示备用#ifdef'd代码

我正在开发一个跨平台的库.有些代码是依赖于平台的,因此我必须使用它们来#ifdef检查平台类型.我将一个类分成两个类,每个类都用于自己的平台.这些类有不同的名称,但最后我需要typedef根据平台将这些类转换为一种类型:

#ifdef UNIX
/** some comment */
typedef Key_unix Key;
#elif WIN
/** another comment */
typedef Key_win Key;
#endif
Run Code Online (Sandbox Code Playgroud)

生成的文档仅显示typedef包含两个注释的第一个文档.如何将两者展示typedef在一起,每个都有自己的评论?

documentation typedef doxygen conditional-compilation

3
推荐指数
1
解决办法
2968
查看次数

为什么我的{$ IFDEF DEBUG}条件不适用于Delphi?

我在Delphi 7项目中有以下代码(IP地址已更改).

const
{$IFNDEF DEBUG}
    AUTHENTICATOR_DB_ADMIN_HOST = '123.456.789.12';
{$ELSE}
    AUTHENTICATOR_DB_ADMIN_HOST = '127.0.0.1';
{$ENDIF}
Run Code Online (Sandbox Code Playgroud)

根据项目选项:

  • 在标题为"条件"的部分下的"目录/条件"选项卡中,我有一个单独的定义:"DEBUG".
  • 在标记为"模块属性"的部分下的"版本信息"选项卡中,我勾选了标记为"调试 - 构建"的复选框.

在上面的代码示例中,未定义"DEBUG"符号,因此将IP地址设置为123.456.789.12而不是127.0.0.1.我究竟做错了什么?

这个问题是继续来自Delphi的条件编译是否允许定义的符号包含值?

delphi debugging preprocessor conditional-compilation delphi-7

3
推荐指数
1
解决办法
8522
查看次数

基于Haxe编译器版本的条件编译?

Haxe检查版本号时条件编译的确切语法是什么?

根据haxe --help-defineshaxedef为haxe编译器版本是"haxe-ver",我假设在代码中变成"haxe_ver".

所以我想检查版本号是否至少为3.2.0.我最初尝试过:

#if (haxe_ver >= 3.2.0)

但这似乎不起作用.然后我尝试了:

#if !haxe_ver < 3.2.0

这似乎是编译,但我想确定.

haxe conditional-compilation

3
推荐指数
1
解决办法
347
查看次数

带有日期时间的C/C++预处理器#if

我想这是不可能的(但是)但不确定.我需要根据当前日期进行条件编译.就像是:

#if (__CURRENT_YEAR < 2016)
...
#endif
Run Code Online (Sandbox Code Playgroud)

我需要在几个月后从项目中排除某些内容,并确保不会忘记这一点(在将来的版本中).

conditional-compilation c-preprocessor

3
推荐指数
1
解决办法
281
查看次数

使用定义的自定义符号(例如:“DEBUG”)执行 Roslyn 条件编译

我正在使用 Roslyn 编译一个项目,代码类似于:

var workspace = MSBuildWorkspace.Create();
var project = await workspace.OpenProjectAsync("SomeProject.csproj");
var compilation = await project.GetCompilationAsync();
Run Code Online (Sandbox Code Playgroud)

我需要设置一个编译符号(例如DEBUGor TRACE,但在我的情况下是完全自定义的)。如何使用 API 执行此操作?

我看到它project有一个CompilationOptions属性,但我没有看到任何相关的内容。


编辑感谢@JoshVarty,他指出在编译之前添加这样的代码:

project = project
    .WithParseOptions(((CSharpParseOptions)project.ParseOptions)
    .WithPreprocessorSymbols("SOME_SYMBOL"));
Run Code Online (Sandbox Code Playgroud)

.net c# conditional-compilation roslyn

3
推荐指数
1
解决办法
672
查看次数

条件编译似乎在Xamarin Studio中不起作用

我创建了一个Xamarin Forms应用程序。并在带有名为“ MyLabel”的标签的新页面内。在我的页面后面的代码中

private void SetUpUI()
{
    #if __IOS__
    this.MyLabel.BackgroundColor = Color.Navy;
    #endif
}
Run Code Online (Sandbox Code Playgroud)

在我的iOS项目选项中,我可以__IOS__在“编译器”选项卡中看到符号。(请看截图)

在此处输入图片说明

当我在iOS中运行时,它不会使标签变成蓝色:

但是,如果我删除#if __IOS__块,它将使标签变为蓝色:

因此,似乎条件编译不起作用。我在Mac上。因此无法在Visual Studio上进行测试。卡住了很长时间,但无法弄清我错过了什么。

conditional-compilation xamarin.ios xamarin xamarin.forms

3
推荐指数
2
解决办法
1343
查看次数

Ada中的end if语句提供的优势超过其他语言

大多数其他编程语言end if在条件语句结束时没有必需的语句.

if boolean_expression then statement else statement
Run Code Online (Sandbox Code Playgroud)

包括end if提供其他语言没有的Ada有什么优势?

if boolean_expression then statement else statement end if
Run Code Online (Sandbox Code Playgroud)

如果条件为真,我认为它与分支预测有关(跳过代码的其他部分),但我不确定.

if-statement ada conditional-compilation

3
推荐指数
2
解决办法
307
查看次数

自定义条件编译符号

我目前正在努力使用自定义配置。我的解决方案有一个 .NET 标准库和两个使用该库的其他项目(一个用于 Windows,一个用于 Android)。

我试图做的是为库提供编译器常量 WINDOWS 和 MOBILE。

这就是我多次尝试的方式:

  1. 创建两个新配置 WindowsDE 和 MobileDE,从调试配置复制设置并创建新的项目配置。在某些尝试中,我还删除了默认的 Debug 配置,但这并没有帮助

  2. 库的属性 -> Build,选择 WindowsDE 并将 WINDOWS 放入 Conditional compiler symbols 字段,然后选择 MobileDE 并将 ANDROID 放入其中。

我正在通过调用库中的方法来测试它:

#if WINDOWS
        System.Diagnostics.Debug.WriteLine("Windows");
#endif

#if ANDROID
        System.Diagnostics.Debug.WriteLine("Android");
#endif
Run Code Online (Sandbox Code Playgroud)

但这根本行不通。也只是使用

System.Diagnostics.Debug.WriteLine("anything");
Run Code Online (Sandbox Code Playgroud)

没有任何 #if 不会打印,并且在某些尝试中,我什至无法再调试库。

将不胜感激在这方面的任何帮助

c# conditional-compilation visual-studio xamarin

3
推荐指数
1
解决办法
3875
查看次数