Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
NDepend查询,确定调用其他DLL中的哪些方法_Ndepend - Fatal编程技术网

NDepend查询,确定调用其他DLL中的哪些方法

NDepend查询,确定调用其他DLL中的哪些方法,ndepend,Ndepend,我们有一个非常大的代码库,有多个团队拥有不同的层。一个团队希望知道调用了哪些方法和类型,以便能够集中这些方法和类型。因此,对于我们放在独立项目中的一组DLL和可执行文件,什么样的查询将为我们提供所有方法,这些方法使用并包含在以“Company.ODS”开头的程序集中。编写此查询有两种方法 在这两种情况下,let assemblieused=Application.Assemblies.WithNameIn(“Infrastructure”,“ApplicationCore”)是适应您的代码的部分

我们有一个非常大的代码库,有多个团队拥有不同的层。一个团队希望知道调用了哪些方法和类型,以便能够集中这些方法和类型。因此,对于我们放在独立项目中的一组DLL和可执行文件,什么样的查询将为我们提供所有方法,这些方法使用并包含在以“Company.ODS”开头的程序集中。

编写此查询有两种方法

在这两种情况下,
let assemblieused=Application.Assemblies.WithNameIn(“Infrastructure”,“ApplicationCore”)
是适应您的代码的部分,例如
let assemblieused=Assemblies.Where(a=>a.Name.StartsWith(“CompanyName.Feature”)


A) 使用类型/方法/字段显示结果

let assembliesUsed = Application.Assemblies.WithNameIn("Infrastructure", "ApplicationCore")

let typesUsed = assembliesUsed.ChildTypes().ToHashSetEx()
let membersUsed = assembliesUsed.ChildMembers().ToHashSetEx()

let typesUser = Application.Types.UsingAny(typesUsed).Where(
  t => !assembliesUsed.Contains(t.ParentAssembly))

let methodsUser = Application.Methods.UsingAny(membersUsed).Where(
  m => !assembliesUsed.Contains(m.ParentAssembly))

from x in assembliesUsed.ChildTypesAndMembers()
let users = 
  x.IsMethod ? x.AsMethod.MethodsCallingMe.Intersect(methodsUser).Cast<IMember>() : 
  x.IsField ?  x.AsField.MethodsUsingMe.Intersect(methodsUser).Cast<IMember>() : 
               x.AsType.TypesUsingMe.Intersect(typesUser)
where users.Any()
select new { x, users }
let assembliesUsed = Application.Assemblies.WithNameIn("Infrastructure", "ApplicationCore")

let typesUsed = assembliesUsed.ChildTypes().ToHashSetEx()
let membersUsed = assembliesUsed.ChildMembers().ToHashSetEx()

let typesUser = Application.Types.UsingAny(typesUsed).Where(
  t => !assembliesUsed.Contains(t.ParentAssembly))

let methodsUser = Application.Methods.UsingAny(membersUsed).Where(
  m => !assembliesUsed.Contains(m.ParentAssembly))

from x in methodsUser.Concat<IMember>(typesUser)

let used = 
  x.IsMethod ? x.AsMethod.MembersUsed.Intersect(membersUsed) : 
               x.AsType.TypesUsed.Intersect(typesUsed) 
where typesUsed.Any()
select new { x, used }
let assemblieused=Application.Assemblies.WithNameIn(“基础设施”、“应用程序核心”)
设typesUsed=assembliesUsed.ChildTypes().ToHashSetEx()
让membersUsed=assembliesUsed.ChildMembers().ToHashSetEx()
让typesUser=Application.Types.UsingAny(typesUsed).Where(
t=>!assembliesUsed.Contains(t.ParentAssembly))
让methodsUser=Application.Methods.UsingAny(membersUsed).Where(
m=>!assembliesUsed.Contains(m.ParentAssembly))
从assembliesUsed.ChildTypesAndMembers()中的x开始
让用户=
x、 是什么方法?x、 AsMethod.MethodScalingMe.Intersect(methodsUser.Cast():
x、 伊斯菲尔德?x、 AsField.MethodsUsingMe.Intersect(methodsUser.Cast():
x、 AsType.TypesUsingMe.Intersect(typesUser)
where users.Any()
选择新{x,用户}


B) 使用类型/方法显示结果用户

let assembliesUsed = Application.Assemblies.WithNameIn("Infrastructure", "ApplicationCore")

let typesUsed = assembliesUsed.ChildTypes().ToHashSetEx()
let membersUsed = assembliesUsed.ChildMembers().ToHashSetEx()

let typesUser = Application.Types.UsingAny(typesUsed).Where(
  t => !assembliesUsed.Contains(t.ParentAssembly))

let methodsUser = Application.Methods.UsingAny(membersUsed).Where(
  m => !assembliesUsed.Contains(m.ParentAssembly))

from x in assembliesUsed.ChildTypesAndMembers()
let users = 
  x.IsMethod ? x.AsMethod.MethodsCallingMe.Intersect(methodsUser).Cast<IMember>() : 
  x.IsField ?  x.AsField.MethodsUsingMe.Intersect(methodsUser).Cast<IMember>() : 
               x.AsType.TypesUsingMe.Intersect(typesUser)
where users.Any()
select new { x, users }
let assembliesUsed = Application.Assemblies.WithNameIn("Infrastructure", "ApplicationCore")

let typesUsed = assembliesUsed.ChildTypes().ToHashSetEx()
let membersUsed = assembliesUsed.ChildMembers().ToHashSetEx()

let typesUser = Application.Types.UsingAny(typesUsed).Where(
  t => !assembliesUsed.Contains(t.ParentAssembly))

let methodsUser = Application.Methods.UsingAny(membersUsed).Where(
  m => !assembliesUsed.Contains(m.ParentAssembly))

from x in methodsUser.Concat<IMember>(typesUser)

let used = 
  x.IsMethod ? x.AsMethod.MembersUsed.Intersect(membersUsed) : 
               x.AsType.TypesUsed.Intersect(typesUsed) 
where typesUsed.Any()
select new { x, used }
let assemblieused=Application.Assemblies.WithNameIn(“基础设施”、“应用程序核心”)
设typesUsed=assembliesUsed.ChildTypes().ToHashSetEx()
让membersUsed=assembliesUsed.ChildMembers().ToHashSetEx()
让typesUser=Application.Types.UsingAny(typesUsed).Where(
t=>!assembliesUsed.Contains(t.ParentAssembly))
让methodsUser=Application.Methods.UsingAny(membersUsed).Where(
m=>!assembliesUsed.Contains(m.ParentAssembly))
从methodsUser.Concat(typesUser)中的x开始
让我们使用=
x、 是什么方法?x、 AsMethod.MembersUsed.Intersect(MembersUsed):
x、 AsType.TypesUsed.Intersect(TypesUsed)
类型使用的位置。Any()
选择新建{x,已使用}

请详细说明您试图实现的目标。谢谢。同样,我们有一套DLL和可执行文件-我们想知道Company.ODS程序集中包含的该集合中使用的每个方法和类型。例如,组装订单调用了Inventory.Save和Inventory.Change方法。这两种方法在assembly Company.ODS中定义。我希望这些方法出现在我的结果集中。这似乎是返回调用Company.ODS中的方法的方法,我们需要从项目中的DLL调用Company.ODS方法的列表。我想知道当你点击“已使用”列中的一个项目时会得到什么。您可以在上面为ApplicationCore提供的屏幕截图中看到这一点。我想获取唯一列表并将其导出到Excel。我看到的另一个问题是,当我从某个地方(即网页、注释)剪切并粘贴到查询文本框中时,文本消失,并留下一个红色框。然后我需要手动输入查询。