在为媒体中心编写插件时,你的插件会被托管在ehexthost.exe这个exe中ehshell.exe,你无法直接启动它,而是你传递了一个特殊的参数ehshell.exe,它将在一个单独的进程中启动插件.
当我们调试媒体浏览器时,我发现附加到第二个进程的过程有点笨重,我知道Debugger.Attach以及我可以使用的一些特殊注册表项.
这两种方法都不符合我的法案.我想要的是按F5并让我当前的visual studio实例自动附加到子进程.可以这样做吗?
如果有一个VS的插件允许我实现这个功能,我会很高兴.
编辑
我最终使用以下宏:
Public Sub CompileRunAndAttachToEhExtHost()
DTE.Solution.SolutionBuild.Build(True)
DTE.Solution.SolutionBuild.Debug()
Dim trd As System.Threading.Thread = New System.Threading.Thread(AddressOf AttachToEhExtHost)
trd.Start()
End Sub
Public Sub AttachToEhExtHost()
Dim i As Integer = 0
Do Until i = 50
i = i + 1
Try
For Each proc As EnvDTE.Process In DTE.Debugger.LocalProcesses
If (proc.Name.IndexOf("ehexthost.exe") <> -1) Then
proc.Attach()
Exit Sub
End If
Next
Catch e As Exception
' dont care - stuff …Run Code Online (Sandbox Code Playgroud) 我试图将C#程序的输出重定向到文件.使用"cmd.exe"时,我可以简单地运行它myprogram.exe arg1 arg2 > out.txt,但我想使用Visual Studio 启动选项完成相同的操作.
我创建了一个C#Empty Project并添加了以下代码:
using System;
class Test
{
public static void Main(string[] args)
{
foreach (var arg in args) Console.WriteLine(arg);
}
}
Run Code Online (Sandbox Code Playgroud)
然后我在项目设置中编辑了命令行参数:

使用Ctrl + F5运行项目不能按预期工作.我得到控制台中打印的命令行参数,而不是输出文件:
arg1
arg2
>
output.txt
Run Code Online (Sandbox Code Playgroud)
如果我将命令行参数更改为:arg1 arg2 "> output.txt"我得到以下输出:
arg1
arg2
^> output.txt
Run Code Online (Sandbox Code Playgroud)
我注意到output.txt在Output文件夹中创建了一个空文件.
这件事有可能完成,还是我被迫继续使用cmd.exe来启动我的程序?
我的项目在同一解决方案文件中同时包含客户端和服务器组件.我通常将调试器设置为在调试时将它们一起启动,但通常情况下我在调试器外部启动服务器,因此我可以根据需要在客户端工作时启动和停止客户端.(这要快得多).
我正试图在解决方案资源管理器中解决问题,以便启动单个项目,而只是在工具栏上粘贴一个按钮,调用宏来启动单个项目的调试器(同时将"F5"类型的调试单独保留到启动两个进程).
我试过录音,但这并没有真正带来任何有用的东西.
到目前为止,我所要做的就是在解决方案资源管理器中找到项目项:
Dim projItem As UIHierarchyItem
projItem = DTE.ToolWindows.SolutionExplorer.GetItem("SolutionName\ProjectFolder\ProjectName").Select(vsUISelectionType.vsUISelectionTypeSelect)
Run Code Online (Sandbox Code Playgroud)
(这基于宏记录器如何尝试这样做.我不确定导航UI对象模型是否是正确的方法,或者我是否应该考虑通过解决方案/项目对象模型).
在我的 dotnet core 2.0 应用程序中,我在某个时间点在不同的进程中(使用一些不同的参数)重新启动相同的应用程序。我希望能够以编程方式将当前的 Visual Studio (2017) 调试器附加到新进程。
这是一个如何在完整框架中完成的示例,但对于初学者来说,该Marshal.GetActiveObject方法似乎不存在。
在 dotnet core 2.0 中是否有不同的方法来实现这一点?或者只是不可能?
我使用 NUnit/MSTest 编写集成测试,只是因为它更容易。测试需要与同一解决方案中的 TCP 服务器通信,并且需要调试测试和 TCP 服务器。有没有办法在调试模式下从解决方案启动项目(控制台应用程序)并同时调试测试方法?无论我尝试什么,VS 都不会让我这么做。