你如何在立即窗口中调用程序集?

时间:2017-09-14 22:14:45

标签: c# visual-studio debugging visual-studio-2017 immediate-window

我尝试在Immediate Window中进行一些调试,你如何执行Assembly.Get...()之类的事情?我唯一得到的是The name 'Assembly' does not exist in the current context。我在堆栈中确实有using System.Reflection,我甚至有代码,如

Assembly ass = Assembly.GetCurrentExecutingAssembly();

但是再次尝试Assembly.GetEntryAssembly()尝试在Immediate Window中进行搜索仍然无法正常工作。

但有一件事是,我尝试调试的代码来自我编译的其他dll。它有什么改变吗?它在{i}尝试调试的文件上有using System.Reflection;

error CS0103: The name 'Assembly' does not exist in the current context

更新

实际上,很奇怪,当代码在另一个dll中时,我似乎失去了对Assembly的访问权限。请参阅下面的,在您看到Hello.exe的堆栈中我可以正常访问Assembly,但是,只要它尝试执行来自我的其他dll的代码,我就无法抓住Assembly

MyProgram.Assembly.dll!MyProgram.Xml.XAdESBuilder.AddTimeStampNode() Line 195   C#  Symbols loaded.
Hello.exe!MyProgram.Crate.EDSCrateXMLBuilder.BuildRootNode() Line 458   C#  Symbols loaded.
Hello.exe!MyProgram.Crate.EDSCrateXMLBuilder.Build(MyProgram.Logger provided) Line 140  C#  Symbols loaded.
Hello.exe!MyProgram.Crate.CrateSigner.Crate() Line 82   C#  Symbols loaded.
Hello.exe!MyProgram.GUI.SignCrate() Line 463    C#  Symbols loaded.
Hello.exe!MyProgram.GUI.BtnSignCrate_Click.AnonymousMethod__28_0() Line 320 C#  Symbols loaded.
[External Code]     Annotated Frame

UPDATE2

在回复Wendy的评论时,这是层次结构。我有两个VS解决方案,一个是构建一个将被其他程序使用的巨型合并程序集。所以在MyProgram.Assembly解决方案中,我有几个项目,每个项目都会构建自己的dll,然后我有我的Assembly项目,这个项目会将所有其他dll合并在一起,生成我的MyProgram.Assembly.dll。< / p>

然后MyOtherProgram会向Reference添加MyProgram.Assembly.dll,并像使用任何其他dll一样使用它。

enter image description here

我还想指出,代码本身可以访问Assembly,而不是Immediate Window,例如:

Assembly assembly = Assembly.GetExecutingAssembly();
assembly.GetType(); // set break point here

如果我在上面提到的代码中设置了断点,那么在Assembly中输入Immediate Window它仍然会说找不到程序集,但我可以在Autos中看到可见的是设置得当。

请注意,我的程序没有任何问题,一切都按预期运行,但为了实现这一目标,我必须多次编写代码并重新运行程序才能知道我从{{1直到我终于得到了我想要的东西......它只是非常令人沮丧和烦恼,因为我认为不应该使用Assembly进行调试。

1 个答案:

答案 0 :(得分:0)

如果解决方案中有两个项目,并且我在解决方案资源管理器中没有选择任何项目,则会收到相同的错误消息。

因此,请确保您在解决方案资源管理器中选择了一个项目,然后在立即窗口中键入命令。