1
회사에서 만든 어셈블리를 선택할 수있는 CQL 쿼리를 만들려고합니다.NDepend에서 어셈블리 메타 데이터 가져 오기
가장 쉬운 방법은 AssemblyInfo에서 생성 된 데이터를 확인하는 것이지만 CQL에서 액세스하는 방법을 찾을 수 없습니다. 어떤 코드 쿼리에 대한
회사에서 만든 어셈블리를 선택할 수있는 CQL 쿼리를 만들려고합니다.NDepend에서 어셈블리 메타 데이터 가져 오기
가장 쉬운 방법은 AssemblyInfo에서 생성 된 데이터를 확인하는 것이지만 CQL에서 액세스하는 방법을 찾을 수 없습니다. 어떤 코드 쿼리에 대한
:
from a in Application.Assemblies
where a.Name.StartsWith("YourCompany.YourProduct")
select a
아니면 더 정교한 뭔가를해야합니까?
좋아, 무엇 this default rule에서 영감을 얻기에 관하여 :
// <Name>UI layer shouldn't use directly DB types</Name>
warnif count > 0
// UI layer is made of types in namespaces using a UI framework
let uiTypes = Application.Namespaces.UsingAny(Assemblies.WithNameIn("PresentationFramework", "System.Windows", "System.Windows.Forms", "System.Web")).ChildTypes()
// You can easily customize this line to define what are DB types.
let dbTypes = ThirdParty.Assemblies.WithNameIn("System.Data", "EntityFramework", "NHibernate").ChildTypes()
// Ideally even DataSet and associated, usage should be forbidden from UI layer:
// http://stackoverflow.com/questions/1708690/is-list-better-than-dataset-for-ui-layer-in-asp-net
.Except(ThirdParty.Types.WithNameIn("DataSet", "DataTable", "DataRow"))
from uiType in uiTypes.UsingAny(dbTypes)
let dbTypesUsed = dbTypes.Intersect(uiType.TypesUsed)
select new { uiType, dbTypesUsed }
물론
세트 uiTypes
및 dbTypes
은 수준 N + 1에서 레벨 N에서 어셈블리 및 어셈블리 정제해야합니다.
우리는 100 개가 넘는 어셈블리를 보유하고 있으며 타이 용 규칙을 만들고 싶습니다. 따라서 N + 1 계층의 어셈블리는 N 계층 이하의 어셈블리에만 종속 될 수 있습니다. –