【问题标题】:What does the method "InitTableColumns" of the "Database" class in the "Microsoft.SqlServer.Management.Smo" library do?“Microsoft.SqlServer.Management.Smo”库中“Database”类的方法“InitTableColumns”有什么作用?
【发布时间】:2019-11-13 20:16:51
【问题描述】:

在“Microsoft.SqlServer.Management.Smo”nuget 包中有一个“Database”类,它有一个“InitTableColumns”方法。正如所述库中的任何方法一样,这个方法没有总结。更奇怪的是,它没有提到互联网(是的,认真的)。

尤其是MSDN Database class 页面。

那么,有人知道它的作用吗?

【问题讨论】:

  • 听起来像是一些不小心暴露的内部喧嚣。为什么不使用像 ILSpy 这样的 IL 反编译器来看看呢?
  • @JeroenMostert,听起来很棒,但恐怕我不知道怎么做。 :D
  • 构建/发布您的应用程序(使用包),导航到 bin 文件夹,找到 SMO DLL 并将其拖入 ILSpy。找到方法,右键单击,展开“调用者”以查看代码的哪一部分调用它以及为什么调用它(我的猜测是某个构造函数或其他 init 方法)。我会自己做,但目前我无法访问 VS 实例。如果该方法没有记录在案,您几乎可以肯定实际上并不打算自己调用它,并且应该假装它不存在,因此反编译完全是为了好玩和获利。
  • @JeroenMostert,实际上,就像我在问题中所说/写的那样,SMO 库中的任何方法或属性都没有记录。在 VS 和 MSDN 中。
  • 我怀疑这是迁移到新包的工件/保留。我几乎肯定旧版本的单个成员文档存在(当 SMO 包含在 SQL Server 本身中时)——但不幸的是,微软真的很擅长让旧文档消失,就好像它根本不存在一样,所以我不能支持我的主张。

标签: c# sql-server smo


【解决方案1】:

一般来说,最好避免使用未记录的方法 :)

如果你想反编译它,你可以使用 DotPeek(来自 JetBrains)或 ILSpy 之类的程序。

安装反编译程序后,需要找到要反编译的dll。反编译将获取已编译的 .NET 代码并将其转换回 C#,这应该更易于阅读(注意并非总是如此)。

查找dll很简单,你可以从编译代码的bin文件夹中拉取它,也可以通过在VS解决方案资源管理器下拉菜单中找到依赖项Microsoft.SqlServer.SqlManagementObjects来浏览找到它的路径,对吧- 单击依赖项,单击“属性”,然后复制属性窗口中显示的路径。

现在您有了 dll 的路径,您可以使用反编译器打开该路径的 dll 并对其进行反编译。反编译后,反编译程序将允许您浏览 dll 中包含的命名空间、类和方法。

这就是它向我展示了InitTableColumns()

public void InitTableColumns()
{
    this.InitChildLevel((Urn)"Table", (ScriptingPreferences)null, false);
    this.InitChildLevel((Urn)"Table/Column", (ScriptingPreferences)null, false);
}

这让我在代码中疯狂追逐,试图了解这个库是如何实现的!

【讨论】:

    猜你喜欢
    • 2019-01-28
    • 2014-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-24
    • 1970-01-01
    • 1970-01-01
    • 2011-10-29
    相关资源
    最近更新 更多