Visual studio TSqlObject没有ContextObject属性?

Visual studio TSqlObject没有ContextObject属性?,visual-studio,t4,sql-server-data-tools,envdte,Visual Studio,T4,Sql Server Data Tools,Envdte,我正在尝试创建一个T4模板,该模板生成用于调用存储过程的源代码,这些存储过程包含在我的解决方案的另一个项目中。我能够成功枚举解决方案中的.sql文件,将它们添加到TSqlModel,并使用该模型以TSqlObject实例的形式检索存储过程列表。现在,我需要枚举每个存储过程的参数,这就是我挂断电话的地方 调试模板时,我可以看到TSqlObject实例有一个ContextObject属性,该属性包含生成代码所需的参数列表。但是,当我尝试从模板访问此属性时,编译器会抱怨该属性不存在: 编译转换时出现错

我正在尝试创建一个T4模板,该模板生成用于调用存储过程的源代码,这些存储过程包含在我的解决方案的另一个项目中。我能够成功枚举解决方案中的.sql文件,将它们添加到
TSqlModel
,并使用该模型以
TSqlObject
实例的形式检索存储过程列表。现在,我需要枚举每个存储过程的参数,这就是我挂断电话的地方

调试模板时,我可以看到
TSqlObject
实例有一个
ContextObject
属性,该属性包含生成代码所需的参数列表。但是,当我尝试从模板访问此属性时,编译器会抱怨该属性不存在:

编译转换时出现错误1:“Microsoft.SqlServer.Dac.Model.TSqlObject”不包含“ContextObject”的定义,并且找不到接受类型为“Microsoft.SqlServer.Dac.Model.TSqlObject”的第一个参数的扩展方法“ContextObject”(是否缺少using指令或程序集引用?)d:\Code\cs\test\u sproccodegen\CallingProject\sproc\u template.tt 34 111 CallingProject

调试时,我肯定可以从即时窗口访问此
ContextObject
属性,但在编译时它不可用


我做错了什么?

这是威尔在问题评论中提到的一种内部方法。您应该改用公共API。以下文档应该可以帮助您开始:

  • 。没有任何T4模板示例,但它有许多查询甚至操作模型的示例。你只需要把它放在T4模板表格中

这是威尔在问题评论中提到的一种内部方法。您应该改用公共API。以下文档应该可以帮助您开始:

  • 。没有任何T4模板示例,但它有许多查询甚至操作模型的示例。你只需要把它放在T4模板表格中
    • 该属性未列出,这可能意味着它是内部的或私有的。文档中仅包含公共和受保护的可访问成员

      在JustDecompile中查看它,您可以看到它实际上是内部的

      该属性未列出,这可能意味着它是内部的或私有的。文档中仅包含公共和受保护的可访问成员

      在JustDecompile中查看它,您可以看到它实际上是内部的


      不,没有。你确定你没有访问私有/内部/受保护的属性?它列在“本地人”窗口中,在“即时”窗口中工作正常。这些会为私人财产工作吗?可能。我也不使用,但是如果你在“快速观察”窗口中查看一个实例,你可以浏览所有属性,不管访问修改器是什么。在屏幕截图中,很明显它不是私有的。它是内部的。这是版本10,但它也是12的内部版本。不,它不是。你确定你没有访问私有/内部/受保护的属性?它列在“本地人”窗口中,在“即时”窗口中工作正常。这些会为私人财产工作吗?可能。我也不使用,但是如果你在“快速观察”窗口中查看一个实例,你可以浏览所有属性,不管访问修改器是什么。在屏幕截图中,很明显它不是私有的。它是内部的。这是第10版,但在第12版中也是内部版本。就像Mark提到的那样?哈哈,很好的尝试,短堆栈。对不起,威尔,回答得太快了!只是想给Mark一些关于如何在不访问内部方法的情况下继续进行的上下文,并且更容易链接到一个答案:)Kevin,你肯定解决了我试图解决的真正问题,但是Will回答了这个特定的问题(显然,调试期间的VS标记内部方法与public没有任何区别,而private则有一个小锁图标),所以我给了他荣誉。一点问题也没有,威尔肯定会得到这个问题的正确答案。正如马克所说的那样?哈哈,很好的尝试,很短的堆栈。对不起,威尔,回答得太快了!只是想给马克一些关于如何在不访问内部方法的情况下继续的上下文,这样更容易链接到答案:)凯文,你肯定抓住了我试图解决的真正问题,但威尔回答了这个问题(显然,调试期间的VS标记内部方法与public没有任何区别,与private没有区别,后者有一个小锁图标),所以我给了他信任。没问题,威尔肯定得到了这个问题的正确答案。