EnvDTE并从属性中获取常量值

时间:2015-09-17 22:36:06

标签: c# visual-studio envdte

我有一个带有常量字符串路由的类:

public class Routes
{
   public const string Route1 = "api/customers";
}

具有Route属性的WebApi控制器类:

public class CustomerController : ApiController
{
   [Route(Routes.Route1)]
   public IList<Customer> GetCustomers()
   {..}
}

我需要使用 EnvDTE 从属性中获取一个常量字符串值。

我能够接收 CodeAttribute2 对象,然后接收 CodeAttributeArgument 的值,但其值仅为&#34; Routes.Route1&#34;。

如何导航到路由类型,然后导航到路由1 常量?

1 个答案:

答案 0 :(得分:0)

简短的回答(假设你事先知道类型存在于项目的文件而不是另一个引用的项目或编译的引用中)是使用EnvDTE.Project.CodeModel,然后递归地导航代码元素(参见HOWTO: Navigate the code elements of a file from a Visual Studio .NET macro or add-in中的方法),直到找到具有FullName“&lt; namespace&gt; .Route.Route1”的那个,它应该是一个EnvDTE.CodeVariable,然后使用CodeVariable.InitExpression来获取“api /”客户“的价值。

答案很长:

How do I get a System.Type from a type name?

How to get a System.Type from an EnvDTE.CodeTypeRef or EnvDTE.CodeClass