传递moduleName == fileName时,AssemblyBuilder.DefineDynamicModule会混淆调试器

时间:2014-12-18 15:32:32

标签: c# .net visual-studio debugging visual-studio-2012

今天我遇到了一个非常奇怪的问题。

自己尝试:

class Program
{

    static void Main(string[] args)
    {
        var name = new AssemblyName { Name = "Test" };
        AssemblyBuilder assembly = AppDomain.CurrentDomain.DefineDynamicAssembly(name, AssemblyBuilderAccess.RunAndSave);
        assembly.DefineDynamicModule(name.Name, name.Name+".dll", false);

        // Everything is okay so far...
        Debugger.Break();

        name = new AssemblyName { Name = "Test.dll" };
        assembly = AppDomain.CurrentDomain.DefineDynamicAssembly(name, AssemblyBuilderAccess.RunAndSave);
        assembly.DefineDynamicModule(name.Name, name.Name, false);

        // look at your stacktrace window here...
        Debugger.Break();
    }
}

在第一个断点上,一切似乎都没问题。

然而,这是我在第二个问题上得到的结论:

unknown function

所有进一步的步进操作都会在堆栈跟踪窗口中显示这些<Unknown function>,并且间谍窗口中的任何进一步评估都将导致调试器的内部错误。

但是,它似乎是调试器的一个错误,因为代码本身表现正常。

有人知道这个问题吗?

为程序集模块提供与dll文件相同的名称是不好的做法吗?

编辑 似乎难以重现......

Visual Studio 2013:v12.0.30723.00 Update 3

Framework .Net 4.5.50938

0 个答案:

没有答案