0

我正在尝试在 中进行一些调试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编译的其他代码。它有什么改变吗?它using System.Reflection;在我正在尝试调试的文件中。

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

更新

Assembly实际上,很奇怪,当代码在另一个 dll 中时,我似乎无法访问。请参见下文,在您看到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

更新2

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

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

在此处输入图像描述

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

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

如果我在上面提到的代码处设置断点,然后输入AssemblyImmediate Window仍然会说未找到组装,但我可以看到Autos可见设置正确。

请注意,我的程序没有任何问题,一切都按预期运行,但要到达那里,我必须编写代码并多次重新运行程序才能知道我从中得到了什么值,Assembly直到我最终得到我想要的想要......只是它非常令人沮丧和烦人,无法Immediate Window像我认为的那样使用它来调试它。

4

1 回答 1

0

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

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

于 2017-09-15T05:24:48.397 回答