C# NET中的元数据来自何处(Visual Studio 2012)

C# NET中的元数据来自何处(Visual Studio 2012),c#,.net,vb.net,.net-4.0,C#,.net,Vb.net,.net 4.0,我以为我知道这个问题的答案,我理解它是通过反射从参考图书馆来的。然而,我有一种情况,我试图调试一个C程序,使用另一个用VB.NET编写的参考程序(也就是说,我试图用C重新编写VB.NET程序) 我正在查看的特定代码使用一个引用类,我的C#程序的F12(转到定义)在一个新窗口中加载对象元数据;然而,VB.NET程序中的相同操作将我带到对象浏览器,声称引用的dll位于不同的位置(它们都引用相同的库) 有没有可能这两种语言在这样一个中心方面表现不同,或者我不知道引用库的另一部分有什么不同?只有当IDE

我以为我知道这个问题的答案,我理解它是通过反射从参考图书馆来的。然而,我有一种情况,我试图调试一个C程序,使用另一个用VB.NET编写的参考程序(也就是说,我试图用C重新编写VB.NET程序)

我正在查看的特定代码使用一个引用类,我的C#程序的F12(转到定义)在一个新窗口中加载对象元数据;然而,VB.NET程序中的相同操作将我带到对象浏览器,声称引用的dll位于不同的位置(它们都引用相同的库)


有没有可能这两种语言在这样一个中心方面表现不同,或者我不知道引用库的另一部分有什么不同?

只有当IDE知道代码并且IntelliSense已经解析了它时,转到定义才能将您带到实际的源代码。如果项目不是同一个解决方案的一部分或不是用同一种语言编写的,它就不能这样做。程序集引用仅提供嵌入程序集中的元数据。它只是描述类型,而不是代码。除了通过调试器的PDB文件(IntelliSense不使用该文件),没有指向生成它的原始源代码的链接,因为无法依赖它的存在性和准确性

是的,C#IDE和VB.NET IDE使用不同的方法来解决这个问题。否则,两个完全不同的团队在开发IDE时会产生副作用,并且在IDE开发过程中缺乏共同性。VisualBasic已经支持IDE几十年了,C#是一个新手,13年前它的团队需要从头开始


事实上,VB.NET IDE在对象浏览器中突出显示了标识符,就像15多年前那样。C#IDE具有将程序集元数据反编译回可读C#代码的代码,并在编辑器窗口中显示生成的文本。C#团队没有选择VB.NET方法的确切原因肯定只有内部人士知道。

可能发生的情况是C#程序正在引用PDB所在目录中的DLL。调试器正在加载PDB,因此知道源文件在本地计算机上的位置。对于VB程序来说,情况并非如此。或者,也许你有一个插件可以为你进行反汇编,它只适用于C#应用程序。Visual studio不会反汇编jack。您的程序集元数据和调试信息令人困惑。为这两者加载元数据-始终加载元数据。它是CLI程序集的基本部分。引用程序集的目录没有PDB文件。此外,这也是设计时间(即程序未运行时点击F12)。