Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 条件式:如果应用程序是从IDE启动的,那么(执行此操作)其他操作(不执行任何操作)_.net_Vb.net_Visual Studio_Compiler Construction_Ide - Fatal编程技术网

.net 条件式:如果应用程序是从IDE启动的,那么(执行此操作)其他操作(不执行任何操作)

.net 条件式:如果应用程序是从IDE启动的,那么(执行此操作)其他操作(不执行任何操作),.net,vb.net,visual-studio,compiler-construction,ide,.net,Vb.net,Visual Studio,Compiler Construction,Ide,只有从IDE?启动应用程序时,才可以执行部分代码 我想做一个条件,如果应用程序是从VS IDE启动的,那么做一件事,但是如果应用程序是从编译中手动启动的(从windows资源管理器,在编译后的应用程序中单击,等等),那么做另一件事 这是可能的吗 类似于此,但将调试更改为(未知事物…): 添加命令行开关以启用额外功能,并通过调试设置从VisualStudio传入该功能 或者使用System.Diagnostics.Debugger.IsAttached添加命令行开关以启用额外功能,并通过调试设置从

只有从IDE?启动应用程序时,才可以执行部分代码

我想做一个条件,如果应用程序是从VS IDE启动的,那么做一件事,但是如果应用程序是从编译中手动启动的(从windows资源管理器,在编译后的应用程序中单击,等等),那么做另一件事

这是可能的吗

类似于此,但将调试更改为(未知事物…):


添加命令行开关以启用额外功能,并通过调试设置从VisualStudio传入该功能


或者使用
System.Diagnostics.Debugger.IsAttached

添加命令行开关以启用额外功能,并通过调试设置从Visual Studio传入该功能


或者使用
System.Diagnostics.Debugger.IsAttached

您真正想做的是检测应用程序的进程是否附加了调试器

为此,请测试的值。如果返回
true
,则附加调试器

当然,您可以将VisualStudio以外的调试器附加到进程,这仍然会导致
IsAttached
返回
true
。您可以从VisualStudio启动应用程序,而无需附加调试器(通常通过按Ctrl+F5),这将导致
IsAttached
返回
false
。但是,无论您有条件地执行什么代码,都有可能在附加了调试器的所有情况下运行,并且无论调试器是哪个调试器,都不应该在未附加调试器时运行

请注意,这不同于“如果调试”,因为它测试您是否正在运行应用程序的调试版本。调试生成与是否附加调试程序无关。您可以在不附加调试器的情况下进行调试生成,也可以将调试器附加到发布生成


但是,我真的不建议将此用于您在问题中提出的建议。如果每次附加调试器时都以不同的方式处理窗口放置问题,您将如何调试这些问题

您真正想做的是检测应用程序的进程是否附加了调试器

为此,请测试的值。如果返回
true
,则附加调试器

当然,您可以将VisualStudio以外的调试器附加到进程,这仍然会导致
IsAttached
返回
true
。您可以从VisualStudio启动应用程序,而无需附加调试器(通常通过按Ctrl+F5),这将导致
IsAttached
返回
false
。但是,无论您有条件地执行什么代码,都有可能在附加了调试器的所有情况下运行,并且无论调试器是哪个调试器,都不应该在未附加调试器时运行

请注意,这不同于“如果调试”,因为它测试您是否正在运行应用程序的调试版本。调试生成与是否附加调试程序无关。您可以在不附加调试器的情况下进行调试生成,也可以将调试器附加到发布生成


但是,我真的不建议将此用于您在问题中提出的建议。如果每次附加调试器时都以不同的方式处理窗口放置问题,您将如何调试这些问题

非常感谢,我有一个愚蠢的问题,我对术语“调试器附件”有点迷茫,如果我在操作系统中为我的应用程序选择一个默认调试器而不是VS调试器,那么默认调试器就是“附件”?还是仅仅是“定义”?我知道在编译的代码中不能附加调试器,但我不知道附加调试器是什么意思对不起。@Elektro我不确定在操作系统中选择默认调试器是什么意思。当应用程序因未处理的异常而崩溃时,操作系统将提示您将事后调试程序附加到进程(如果有)。如果安装了VisualStudio,情况就是这样。但调试器在您请求之前不会附加。否则,当您按
F5
或从VS运行应用程序时,调试器将自动连接,无论是调试版本还是发布版本。您必须按Ctrl+
F5
启动而不连接调试器,或者在VS之外启动调试器。所有代码都已编译。它必须是为了执行它。所以这与此无关。非常感谢,我有一个愚蠢的问题,我对术语“调试器附件”有点迷茫,如果我在操作系统中为我的应用程序选择一个默认调试器而不是VS调试器,那么默认调试器是“附件”的?还是仅仅是“定义”?我知道在编译的代码中不能附加调试器,但我不知道附加调试器是什么意思对不起。@Elektro我不确定在操作系统中选择默认调试器是什么意思。当应用程序因未处理的异常而崩溃时,操作系统将提示您将事后调试程序附加到进程(如果有)。如果安装了VisualStudio,情况就是这样。但调试器在您请求之前不会附加。否则,当您按
F5
或从VS运行应用程序时,调试器将自动连接,无论是调试版本还是发布版本。您必须按Ctrl+
F5
启动而不连接调试器,或者在VS之外启动调试器。所有代码都已编译。它必须是为了执行它。所以这与此无关。
Public Class Form2

    Private Sub Form2_Load(sender As Object, e As EventArgs) Handles MyBase.Load
#If DEBUG Then
        Me.Location = New Point(Form1.Right, Form1.Top)
#Else
        Dim BorderWidth = (Me.Width - Me.ClientSize.Width)
        Me.Location = New Point((Form1.Location.X + (Form1.Width + BorderWidth)), Form1.Location.Y)
#End If
    End Sub

End Class