从 Access 运行 时调试 .NET com dll
Debug .NET com dll when running from Access
我有一个在 VB.net 中开发的 com dll,它提供了一个到 eBay api 的接口。工作多年。最近 eBay 更改了证书颁发机构并移至 TLS 1.2。通过它进行排序,但现在从 Access 调用时,dll 似乎在事务处理过程中退出。该功能会列出从本地库存到 eBay 的清单。第一部分将列表项目的图片加载到 eBay。那很好用。我可以使用 Fiddler 查看调用和响应。然后它继续实际列出从 Access 调用时似乎停止的项目。我在 Access 中得到的结果是“在文件位置找不到 x.dll”。我知道调用会转到 dll,因为它会上传图片。
我在 VB.net 开发了一个测试项目来测试 dll,当 运行 一切正常时。我可以在 fiddler 中看到列表调用和响应。当 运行 来自 Access 时,没有列表调用。我可以验证调用的端点是否与测试项目或 Access 相同。
我的问题是如何在 Visual Studio IDE 中调试从 Access 调用的 dll。有什么想法吗?
是的,你这样做的方法是打开 vs class 你拥有的 .dll。
然后在项目的调试中,设置这个:
现在,当您按下 f5 时,访问将启动并且 运行。
如果此时说您关闭访问(退出),那么您会注意到调试过程停止了。
但是,请浏览 Access 中的表单和其他内容,然后到达您点击该按钮或其他内容的位置。
您现在发现您可以设置一个断点,甚至可以像任何其他代码一样单步执行和调试您的 .net 代码。所以在我的例子中说(一个自定义的 sage 300 .net 接口来访问),我想从 VBA.
调试“查找客户”例程
嗯,在 vb.net 我有这个代码:
因此,当任何例程 - 即使是 class 实例中的例程被调用时,您可以设置 break-points 等
然后停下来?退出访问即可。
因此,您可以更改代码,甚至可以按 f5。
不清楚您是如何注册您的 .dll(或者您使用一些 VBA 到 side-load .net - 这就是我所做的,因为必须注册很痛苦每台 PC 上我的 .net com 对象。
但是,请尝试以上方法。它应该可以让您调试 .dll 代码。诀窍是让 VS 启动 ms-access 作为附加的调试会话 - 这正是上面 class 项目中的上述设置允许你做的。
请注意,在上面,我使用了访问 2010 的路径(访问 14),因此请将 access.exe 的路径名称替换为您正在使用的访问版本。
请记住,如果有一些安装程序或一些自定义“东西”可以为您注册 .net .dll?
那么,在此过程中,如果您的 VBA 假定已注册 com 对象,请确保启用此复选框:
在编译项目设置时,您需要选中此选项:
注意非常小心,检查上面的选项不会改变代码或任何东西 - 它只会自动为你做一个 regasum,这当然会 re-register 你现有的 .dll - 这就是我们想要调试。完成后,执行 运行 您的 .dll 的 re-register 以从当前项目 bin 文件夹中的调试 .dll 切换回您在 PC 上“常规”使用的任何内容。
仅供参考:
在大多数情况下,我发现除非您以管理员身份启动 VS,否则整个想法都行不通。因此,确保 VS 运行 作为管理员才能正常工作。
我倾向于直接点击 windows 键,或者甚至右击你的 vs 快捷方式,当然选择 运行 作为管理员。
这是经常需要的,您注意到 VS 会在管理模式下轻松且非常清楚地向您显示 运行ning,我现在几乎总是 运行 VS 这种方式。
你应该看到这个:
我有一个在 VB.net 中开发的 com dll,它提供了一个到 eBay api 的接口。工作多年。最近 eBay 更改了证书颁发机构并移至 TLS 1.2。通过它进行排序,但现在从 Access 调用时,dll 似乎在事务处理过程中退出。该功能会列出从本地库存到 eBay 的清单。第一部分将列表项目的图片加载到 eBay。那很好用。我可以使用 Fiddler 查看调用和响应。然后它继续实际列出从 Access 调用时似乎停止的项目。我在 Access 中得到的结果是“在文件位置找不到 x.dll”。我知道调用会转到 dll,因为它会上传图片。
我在 VB.net 开发了一个测试项目来测试 dll,当 运行 一切正常时。我可以在 fiddler 中看到列表调用和响应。当 运行 来自 Access 时,没有列表调用。我可以验证调用的端点是否与测试项目或 Access 相同。
我的问题是如何在 Visual Studio IDE 中调试从 Access 调用的 dll。有什么想法吗?
是的,你这样做的方法是打开 vs class 你拥有的 .dll。
然后在项目的调试中,设置这个:
现在,当您按下 f5 时,访问将启动并且 运行。
如果此时说您关闭访问(退出),那么您会注意到调试过程停止了。
但是,请浏览 Access 中的表单和其他内容,然后到达您点击该按钮或其他内容的位置。
您现在发现您可以设置一个断点,甚至可以像任何其他代码一样单步执行和调试您的 .net 代码。所以在我的例子中说(一个自定义的 sage 300 .net 接口来访问),我想从 VBA.
调试“查找客户”例程嗯,在 vb.net 我有这个代码:
因此,当任何例程 - 即使是 class 实例中的例程被调用时,您可以设置 break-points 等
然后停下来?退出访问即可。
因此,您可以更改代码,甚至可以按 f5。
不清楚您是如何注册您的 .dll(或者您使用一些 VBA 到 side-load .net - 这就是我所做的,因为必须注册很痛苦每台 PC 上我的 .net com 对象。
但是,请尝试以上方法。它应该可以让您调试 .dll 代码。诀窍是让 VS 启动 ms-access 作为附加的调试会话 - 这正是上面 class 项目中的上述设置允许你做的。
请注意,在上面,我使用了访问 2010 的路径(访问 14),因此请将 access.exe 的路径名称替换为您正在使用的访问版本。
请记住,如果有一些安装程序或一些自定义“东西”可以为您注册 .net .dll?
那么,在此过程中,如果您的 VBA 假定已注册 com 对象,请确保启用此复选框:
在编译项目设置时,您需要选中此选项:
注意非常小心,检查上面的选项不会改变代码或任何东西 - 它只会自动为你做一个 regasum,这当然会 re-register 你现有的 .dll - 这就是我们想要调试。完成后,执行 运行 您的 .dll 的 re-register 以从当前项目 bin 文件夹中的调试 .dll 切换回您在 PC 上“常规”使用的任何内容。
仅供参考: 在大多数情况下,我发现除非您以管理员身份启动 VS,否则整个想法都行不通。因此,确保 VS 运行 作为管理员才能正常工作。
我倾向于直接点击 windows 键,或者甚至右击你的 vs 快捷方式,当然选择 运行 作为管理员。
这是经常需要的,您注意到 VS 会在管理模式下轻松且非常清楚地向您显示 运行ning,我现在几乎总是 运行 VS 这种方式。
你应该看到这个: