Dea*_*ano 27 .net c# installer
我编写了一个安装类,它扩展了Installer并覆盖了afterInstall,但是我得到了一个空指针异常.我怎样才能调试我的课程?
ste*_*hbu 43
对于难以调试的代码段而言非常方便的东西是
System.Diagnostics.Debugger.Break()
Run Code Online (Sandbox Code Playgroud)
将抛出任何已安装的调试器(VStudio,WinDbg,远程调试器等)捕获的断点.
使用它来调试非常棘手的区域,其中常规F5 + Go或"附加到进程"很难或不可能执行,一些示例包括:
Tim*_*mex 10
我发现的最好方法是编写单元测试,并从单元测试中新建并初始化安装程序类:
[TestClass] public class InstallerTest {
[TestMethod]
public void InstallTest() {
// substitute with your installer component here
DataWarehouseInstall installer = new DataWarehouseInstall();
string assemblyDirectory = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
string installLogFilePath = Path.Combine(assemblyDirectory, "install.log");
installer.Context = new System.Configuration.Install.InstallContext(installLogFilePath, null);
// Refactor to set any parameters for your installer here
installer.Context.Parameters.Add("Server", ".");
//installer.Context.Parameters.Add("User", "");
//installer.Context.Parameters.Add("Password", "");
installer.Context.Parameters.Add("DatabaseName", "MyDatabaseInstallMsiTest");
//installer.Context.Parameters.Add("DatabasePath", "");
// Our test isn't injecting any save state so we give a default instance for the stateSaver
installer.Install(new Hashtable());
} }
Run Code Online (Sandbox Code Playgroud)
至少它会更好地利用IDE工具.这对于拥有大量组件的大型安装人员尤其有用.然后,您还可以创建有序单元测试并按顺序运行它们,以在调试或自动构建期间模拟安装程序.
另一个提示是一般的SOLID/GRASS软件原理...以整洁/薄层形式开发,保持您的实际"自定义操作"安装程序逻辑非常简单,而是调用任何特定于您的安装程序的可重用API内容就像我们习惯于UI开发一样.(无论如何,安装程序只是另一个UI.)如果您的目标是在产品的所有安装程序之间共享某种UI体验,那么这一点尤为关键.
Bob*_*nny 10
惊讶没有人真正回答过.将MessageBox.Show("hello")放入自定义操作的Install()成员中.在debug config中构建部署.安装.出现MessageBox时,进入VS IDE,Debug,Attach Process并查找标记为"Managed"的msiexec实例.将调试器附加到msiexec的该实例.现在返回自定义操作的源,并在调用MessageBox.Show()之后立即放置断点.关闭MessageBox,您的断点将被点击,您正在IDE中进行调试!
| 归档时间: |
|
| 查看次数: |
27030 次 |
| 最近记录: |