调试(单步执行)VS安装项目,你是如何做到的?

时间:2014-06-04 15:19:08

标签: c# visual-studio-2010 installation custom-action

我正在尝试调试我在c#(VS)中创建的安装项目...我将项目当前设置为“Debug”而不是“Release”,并且我已将以下代码添加到我的自定义操作区域。 ..

public override void Install(System.Collections.IDictionary stateSaver)
{
    if (Debugger.IsAttached == false) Debugger.Launch();
    MessageBox.Show("Installing Application...");

    //Continue with install process
    base.Install(stateSaver);
}

//Code to perform at the time of uninstalling application 
public override void Uninstall(System.Collections.IDictionary savedState)
{
    if (Debugger.IsAttached == false) Debugger.Launch();
    MessageBox.Show("Uninstalling Application...");

    //Continue with uninstall process
    base.Uninstall(savedState);
}

当我去安装时(右键单击安装项目 - >安装)它按预期工作,我可以使用F11逐步执行每一行。当我去卸载时(右键单击安装项目 - >卸载),它不会让我逐步使用F11或继续使用F5或查看任何intellisense弹出窗口(如变量值等)。虽然我可以单击文件菜单选项来执行每个操作(Debug-> Continue and Debug-> Step Into)。

为什么会出现这种情况以及我如何能够获得该功能的任何想法?

附加问题:在运行期间单步执行设置项目时是否可以更改任何代码(如添加消息框),就像使用普通程序一样?

1 个答案:

答案 0 :(得分:1)

<强>解决方案: 在我的情况下,我试图调试自定义安装操作Install()和Uninstall()。我最终将以下内容添加到我的自定义操作中......

if (Debugger.IsAttached == false) Debugger.Launch();

这很简单,下面是它的一个例子......

//Code to perform at the time of installing application
public override void Install(System.Collections.IDictionary stateSaver)
{
    if (Debugger.IsAttached == false) Debugger.Launch();

    CustomParameters cParams = new CustomParameters();
    cParams.Add("InstallPath", this.Context.Parameters["targetdir"]);
    cParams.SaveState(stateSaver);

    //Continue with install process
    base.Install(stateSaver);
}