我有一个可编译为.dll的自定义操作项目,我希望能够逐步执行我的自定义操作,我知道可以将程序包更改为wixsharp.bin,但是这样做并不实用。无论如何,我仍然尝试这种方法,但是没有达到断点。
Wix使用:System.Diagnostics.Debugger.Launch();
在调试中启动操作,这似乎不适用于wixsharp,但是预期的结果是我正在尝试实现的目标。
我已经看到debug.assert可以用于调试,并且我也看到了对#if DEBUG #endif
的引用,我该如何正确调试?
[CustomAction]
public static ActionResult CustomAction(Session session)
{
Debug.Assert();
MessageBox.Show("Hello World!" + session[IISSessions.AppPoolName], "External Managed CA");
return ActionResult.Success;
}
答案 0 :(得分:1)
N.B! :我不使用WixSharp,但是以下内容应该是通用的。至少其中一些。
调试自定义操作 :我只是按照此过程操作(因为我通常使用本机代码):
msiexec.exe
,对于托管代码,您附加到 rundll32.exe
。 系统上下文或用户上下文过程,具体取决于自定义操作的运行方式。操作方法 :Advanced Installer中有一段视频显示了大部分流程:Debug C# Custom Actions。很好。
这个问题最近出现了很多,最近一次出现在this question / answer, section 4中。
在installsite.org:Debugging Custom Actions中,有关该主题的内容有些陈旧但内容不错。
我根据您的建议进行了测试,以验证它对于常规的WiX设置是否也适用(#if DEBUG使代码仅适用于调试版本):
#if DEBUG
System.Diagnostics.Debugger.Launch();
#endif
您提到的另一个命令对我也适用:
Debug.Assert(false);
主要挑战是确保正确的dll版本使其进入MSI。如果您没有看到预期的行为,请尝试使用Orca或其他MSI编辑器工具将要与之一起运行的dll版本(调试或发行版)手动插入MSI中-只是要确保其中有正确的二进制文件。我不知道在WixSharp中如何设置。
C++ debugging
:
Managed Code
(除上述内容之外):
某些链接 (用于保存):
答案 1 :(得分:1)
不太清楚是什么原因引起的,我删除了bin文件夹,然后运行了一个构建,现在看来它可以正常工作。正如{SteinÅsmul所说,System.Diagnostics.Debugger.Launch()
确实可以正常工作,它必须包含在#if DEBUG
中。内置DEBUG后,运行输出的.msi,当您在安装过程中点击自定义操作时,系统将提示您打开Visual Studio实例。
[CustomAction]
public static ActionResult CustomAction(Session session)
{
#if DEBUG
System.Diagnostics.Debugger.Launch();
#endif
MessageBox.Show("Hello World!" + session[IISSessions.AppPoolName], "External Managed CA");
return ActionResult.Success;
}