一个快速的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
我工作的一个开源项目(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覆盖在上面链接的教程,参考将由编译正确使用.
先感谢您.
我正在开发一个跨平台的库.有些代码是依赖于平台的,因此我必须使用它们来#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在一起,每个都有自己的评论?
我在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"符号,因此将IP地址设置为123.456.789.12而不是127.0.0.1.我究竟做错了什么?
这个问题是继续来自Delphi的条件编译是否允许定义的符号包含值?
delphi debugging preprocessor conditional-compilation delphi-7
Haxe检查版本号时条件编译的确切语法是什么?
根据haxe --help-defineshaxedef为haxe编译器版本是"haxe-ver",我假设在代码中变成"haxe_ver".
所以我想检查版本号是否至少为3.2.0.我最初尝试过:
#if (haxe_ver >= 3.2.0)
但这似乎不起作用.然后我尝试了:
#if !haxe_ver < 3.2.0
这似乎是编译,但我想确定.
我想这是不可能的(但是)但不确定.我需要根据当前日期进行条件编译.就像是:
#if (__CURRENT_YEAR < 2016)
...
#endif
Run Code Online (Sandbox Code Playgroud)
我需要在几个月后从项目中排除某些内容,并确保不会忘记这一点(在将来的版本中).
我正在使用 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) 我创建了一个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上进行测试。卡住了很长时间,但无法弄清我错过了什么。
大多数其他编程语言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)
如果条件为真,我认为它与分支预测有关(跳过代码的其他部分),但我不确定.
我目前正在努力使用自定义配置。我的解决方案有一个 .NET 标准库和两个使用该库的其他项目(一个用于 Windows,一个用于 Android)。
我试图做的是为库提供编译器常量 WINDOWS 和 MOBILE。
这就是我多次尝试的方式:
创建两个新配置 WindowsDE 和 MobileDE,从调试配置复制设置并创建新的项目配置。在某些尝试中,我还删除了默认的 Debug 配置,但这并没有帮助
库的属性 -> 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# ×4
debugging ×2
xamarin ×2
.net ×1
ada ×1
asp.net ×1
conditional ×1
delphi ×1
delphi-7 ×1
doxygen ×1
haxe ×1
if-statement ×1
mono ×1
preprocessor ×1
roslyn ×1
typedef ×1
xamarin.ios ×1