C# 如何调试通过assembly.Load(字节[])加载的程序集?
我正在为使用C# 如何调试通过assembly.Load(字节[])加载的程序集?,c#,.net,visual-studio,visual-studio-2008,C#,.net,Visual Studio,Visual Studio 2008,我正在为使用Assembly.Load(byte[])加载插件DLL的产品创建插件。这一切都很好,但这意味着我没有加载调试符号以逐步完成代码的常规方法 疯狂的是,几个月前,我遇到了完全相同的问题并解决了它——我为自己感到骄傲!所以我知道这是可以做到的,我只是忘了怎么做 对于我可能尝试过的事情,我有一些模糊的记忆,但我无法从脑海中挑出细节: .NET反射器 但可能是错的,因为我清楚地记得我浏览了原始的.cs文件 使用IIS Express而不是Cassini 但这让我觉得是一个奇怪的解决方
Assembly.Load(byte[])
加载插件DLL的产品创建插件。这一切都很好,但这意味着我没有加载调试符号以逐步完成代码的常规方法
疯狂的是,几个月前,我遇到了完全相同的问题并解决了它——我为自己感到骄傲!所以我知道这是可以做到的,我只是忘了怎么做
对于我可能尝试过的事情,我有一些模糊的记忆,但我无法从脑海中挑出细节:
- .NET反射器
- 但可能是错的,因为我清楚地记得我浏览了原始的.cs文件
- 使用IIS Express而不是Cassini
- 但这让我觉得是一个奇怪的解决方案——程序集是从字节数组加载的,因此框架不知道DLL来自何处,也不知道适当的PDB在看到DLL时会是什么样子。这个问题应该存在于任何环境中
- 通过“模块”窗口手动加载符号
- 试过这个,;我得到“符号文件xxxxx.pdb与模块不匹配”-因为,当然,我们是从字节数组加载的,而不是DLL本身
Assembly.Load(byte[])
加载的。然后把你的符号放在C:\Windows\symbols\dll
或任何方便的地方。我一直这样做是为了调试我们自己产品的插件DLL,这些DLL由另一个应用程序以类似的方式加载
您可以使用
gacutil
将其安装到GAC中。请记住在完成调试时删除它,否则您可能会对您忘记的旧版本运行测试。您可能使用了Load(byte[],byte[])重载。我希望能够做到这一点,但该产品是封闭源代码的。我知道Assemly.Load(byte[])正在使用,因为我使用了Reflector。我可以要求他们使用byte[],byte[]
并检查.pdb文件,但我必须等待谁知道下一个版本需要多长时间(假设它得到批准)。谢谢:)你的程序集是强命名的吗?强命名听起来是一个很好的解决方案,我以后可能会研究。很难做到吗?与此同时,我做了一些乱七八糟的事情,但效果不错。该框架只动态调用一个方法(这是我需要调试的部分),因此我只是将动态实例化的类作为“real”类的包装器,该类执行leg工作。我通过Assembly.load(byte[],byte[])和hey presto加载“real”类。当我用完它的时候,我就把它打开。肮脏,但它可以工作。@IainFraser强命名很容易。您可以使用强名称工具(sn.exe)生成密钥文件。然后,在项目属性“签名”部分,您可以告诉生成使用密钥文件对程序集进行签名。看见