【问题标题】:How to obtain refereced method (destination) namespace如何获取引用的方法(目标)命名空间
【发布时间】:2018-07-03 23:01:00
【问题描述】:

我正在使用 NDepend 2018.1.1。我需要获取以下 NDepend Query

target 的命名空间
//
// <Name>Relevant Methods</Name>
//

let e9 = "Sys.Core.App.CommonService"
let e10 = "Sys.Core.App.CommonService3GProvider"
let e17 = "Sys.Core.App.UnderwritingService3GProvider"
let e18 = "Sys.Core.App.UniquePerson.Actions"
let e19 = "Sys.Core.App.UniquePerson"

let e1 = "Sys.Co.Application.UnderwritingService"
let e2 = "Sys.Co.Application.UnderwritingService3GProvider"

let e3 = "Sys.Core.App.Accounting.Services"
let e4 = "Sys.Core.App.Accounting.Services.Provider"

let e5 = "Sys.Core.App.BillingService"
let e6 = "Sys.Core.App.BillingService3GProvider"


let e7 = "Sys.Core.App.ClaimsService"
let e8 = "Sys.Core.App.ClaimsService3GProvider"

let e11 = "Sys.Core.App.EventsService"
let e12 = "Sys.Core.App.EventsService3GProvider"

let e13 = "Sys.Core.App.IntegrationService"
let e14 = "Sys.Core.App.IntegrationService3GProvider"

let e15 = "Sys.Core.App.SecurityServices"

let e16 = "Sys.Core.App.UnderwritingService"
/**/


let ensamblados = from m in 
         Assemblies.WithName(e1).Concat(
         Assemblies.WithName(e2)).Concat(
         Assemblies.WithName(e3)).Concat(
         Assemblies.WithName(e4)).Concat(
           Assemblies.WithName(e5)).Concat(
           Assemblies.WithName(e6)).Concat(
           Assemblies.WithName(e9)).Concat(
           Assemblies.WithName(e10)).Concat(
           Assemblies.WithName(e11)).Concat(
           Assemblies.WithName(e12)).Concat(
           Assemblies.WithName(e13)).Concat(
           Assemblies.WithName(e14)).Concat(
           Assemblies.WithName(e15)).Concat(
           Assemblies.WithName(e16)).Concat(
           Assemblies.WithName(e17)).Concat(
           Assemblies.WithName(e18)).Concat(
           Assemblies.WithName(e19))

select m

//Obtain the types and members of the assemblies
from dest in ensamblados 
let targets = dest.ChildTypesAndMembers.ToHashSetEx() 

let methodsUser = Application.Methods.UsingAny(targets)
let typesUser = Application.Types.UsingAny(targets)


//Search all the sources that call any of the targets Type or Members

//Concatenar los metodos y los tipos de orig
let results = from orig in methodsUser //.Concat((IEnumerable<IMember>)typesUser)

// HERE需要获取以下target的命名空间

select new { 
   orig
   ,t=orig.FullName
   ,NumRefAlOrig = orig.IsMethod ? orig.AsMethod.MethodsCalled.Intersect(targets).Concat(orig.AsMethod.FieldsUsed.Intersect(targets)).Count() : 
             orig.AsType.TypesUsed.Intersect(targets).Count()

   ,OrigenEsMetodo= orig.IsMethod
   ,OrigenTipo= orig.IsMethod ? "Metodo":"Tipo"
}

/*Metodos*/
from rr in results
where rr.OrigenEsMetodo 
select rr

我尝试了与 NDepend 框架不同的方法,但这是我的第一个 NDepende 查询,我觉得我遗漏了一些非常明显的东西

【问题讨论】:

  • sorry we don't understand "// HERE需要获取以下目标的命名空间"你到底想要什么?
  • 我需要列出被调用 X.Y.methodBeingUsed 的方法的 FQN
  • 这太不清楚了,无法提供建设性的答案,X 是什么?是吗?方法被使用?它与 methodsUser 相比如何,你想用 FQN 做什么?
  • 我需要列出使用其完全限定名称调用的目标方法(目标),类似于“Namespace.Assembly.MethodName”
  • 如果 orig 是 IMethod,您可以使用 orig.MethodsCalled.Intersect(targets)

标签: ndepend


【解决方案1】:

首先你可以通过写作来简化

let ensamblados = from m in 
         Assemblies.WithNameIn(
  "Sys.Co.Application.UnderwritingService",
  "Sys.Co.Application.UnderwritingService3GProvider",...)

let ensamblados = from m in 
         Assemblies.WithNameLike("Sys.Co.Application.")
.Concat( Assemblies.WithNameLike("Sys.Core.App.")

当问题更清楚时,我们会完成这个答案

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-17
    • 2013-05-15
    • 1970-01-01
    • 2016-08-16
    • 2010-09-29
    • 1970-01-01
    • 2013-01-08
    • 1970-01-01
    相关资源
    最近更新 更多