在解决方案属性中,我将Configuration设置为"release",用于我唯一的项目.
在主程序的开头,我有这个代码,它显示"Mode = Debug".我也在最顶端有这两行:
#define DEBUG
#define RELEASE
Run Code Online (Sandbox Code Playgroud)
我在测试正确的变量吗?
#if (DEBUG)
Console.WriteLine("Mode=Debug");
#elif (RELEASE)
Console.WriteLine("Mode=Release");
#endif
Run Code Online (Sandbox Code Playgroud)
我的目标是根据调试版本和发布模式为变量设置不同的默认值.
有没有一个编译器指令,我可以用它来编译一个不同的代码行来定位模拟器而不是我的设备.就像是:
# IF SIMULATOR
[self.imagePicker setSourceType:UIImagePickerControllerSourceTypePhotoLibrary];
# ELSE
[self.imagePicker setSourceType:UIImagePickerControllerSourceTypeCamera];
# END
Run Code Online (Sandbox Code Playgroud)
编辑
我在一个项目中有几个类,它们只需要在应用程序的某些版本中,这些版本当前还没有准备好发布或调试.
为了防止这些类被使用,我想围绕它们:
#if USE_MYCLASS
// Code here...
#endif
Run Code Online (Sandbox Code Playgroud)
不幸的是,我不知道如何设置项目范围#define.
Visual Studio中是否有功能来设置项目范围的定义.
如果有,虽然我现在不需要它,是否有设置解决方案范围定义的功能?
如果没有这样的功能(看作C#没有包含文件,我想这是可能的),是否有任何方法或插件在不使用命令行编译器和/ D的情况下执行此功能?
Visual Studio 2013.
我有一个外部DLL,我在csproj文件中引用如下:
<ItemGroup>
<Reference Include="NameOfDll">
<HintPath>Path\To\Dll\NameOfDll.dll</HintPath>
</Reference>
Run Code Online (Sandbox Code Playgroud)
我希望这个引用在编译器符号存在时起作用,而在编译器符号不存在时不起作用.(为了解决下面的第一条评论,假设编译器符号被称为Fred.)
这个问题[ 条件参考 ]让我觉得我可以在上面显示的Reference元素中添加一个名为Condition的属性,但我无法确定哪个值赋予该属性以实现我想要的效果.
我很高兴能在VS UI中找到一种方法,但我会采取任何方法.
我对.csproj文件中的函数和条件完全陌生,所以我们非常感谢所有的帮助.
我想要做的是检查当前配置中的特定编译器指令.一个例子如下:
<Choose>
<When Condition= [current configuration has CONST-1 compiler constant defined] >
...
</When>
<When Condition= [current configuration has CONST-2 compiler constant defined] >
...
</When>
</Choose>
Run Code Online (Sandbox Code Playgroud)
我不知道这是否可能.如果有更好的方法来做我要求的事情让我也知道.无论哪种方式,我想测试一个独立于配置的条件.
编辑
我真正想要的是一个我可以轻松编辑的值,最好是在Visual Studio中编辑,我也可以检查一下configuraiton.我考虑过编译器常量,因为您可以在VS的Project Properties中轻松更改它们.
我想在我的代码中禁用特定警告(W1035),因为我认为编译器对此警告是错误的:
function TfrmNagScreen.Run: TOption;
begin
if ShowModal = mrOk then
Result := TOption(rdgAction.EditValue)
else
Abort
end;
Run Code Online (Sandbox Code Playgroud)
因为Abort投掷,结果不可能是未定义的EAbort.
我试过了:
{$WARN 1035 Off}:显然这仅适用于某些特定错误(请参阅文档){$W-1035}:什么都不做我知道我可以在项目选项中全局关闭警告,或使用{$WARNINGS OFF},但这不是这里的意图.
编辑:我现在已经将QC作为#89744了.
当我在代码中使用Delphi指令时,例如:
{$IFDEF something}
.
.
.
{$ENDIF}
Run Code Online (Sandbox Code Playgroud)
我在哪里为项目分配"某事"这个词?我在一些地方试过项目选项,但它没有用.猜猜我找不到正确的.
我有一个我在Delphi 7中写过的单元,并且刚刚获得了转换为Delphi XE(Unicode)的乐趣(痛苦).
在遇到麻烦后,该单元工作正常,我现在正在尝试使该单元与不同的Delphi版本兼容,如果我需要在更新其他代码时将IDE切换回Delphi 7.
我只有Delphi 7和Delphi XE,但从我收集的Delphi 1编写的代码到Delphi 2007将编译,但Delphi 2009及以上的代码将是Unicode.
...无论如何,在单元中我将非unicode和unicode分开,如下所示:
{$IFDEF VER150} //Delphi 7
// code
{$ELSE IFDEF VER220} //Delphi XE
// code
{$ENDIF}
Run Code Online (Sandbox Code Playgroud)
如何修改编译器指令以使规则适用于多个版本?例如:
{$IFDEF VER80, //D1
VER90, //D2
VER100, //D3
VER120, //D4
VER130, //D5
VER140, //D6
VER150, //D7}
Run Code Online (Sandbox Code Playgroud)
如果我分发源或.dcu单元,这将覆盖所有Delphi版本.
谢谢.
编译指示一样autodie,根据文档,是词法范围的.
{
use autodie;
..
..
}
# Can die here
Run Code Online (Sandbox Code Playgroud)
这适用于所有加载的模块use吗?据我所知,use几乎相同:
BEGIN {
require autodie;
autodie->import(LIST);
}
Run Code Online (Sandbox Code Playgroud)
BEGIN在编译时发生,并且require不是词法范围.那怎么autodie知道它的范围呢?
c# ×4
delphi ×4
csproj ×2
debugging ×1
delphi-2007 ×1
delphi-2009 ×1
internals ×1
ios ×1
iphone ×1
msbuild ×1
objective-c ×1
perl ×1
release ×1
scope ×1