我将表中的模式转储到包的标记注释中。
<Annotation AnnotationType="Tag" Tag="PackageSchema">
<#=Table.Schema#>
</Annotation>
在用于创建主包的 BIML 中,我正在为每个模式创建一个序列容器并将包放入相应的容器中。至少这是我要求它做的。
<Package Name="01-Master" ConstraintMode="Linear">
<Tasks>
<# foreach (var SchemaNode in RootNode.Schemas) { #>
<Container Name="SEQC <#=SchemaNode.Name#>" ConstraintMode = "Parallel">
<Tasks>
<# foreach (var Pckg in RootNode.Packages.Where(pkgschema => pkgschema.GetTag("PackageSchema")==SchemaNode.Name)) { #>
<ExecutePackage Name="EP <#=Pckg.Name#>" DelayValidation="true">
<ExternalProjectPackage Package="<#=Pckg.Name#>.dtsx">
</ExternalProjectPackage>
</ExecutePackage>
<# } #>
</Tasks>
</Container>
<# } #>
</Tasks>
当它运行时,我得到一个带有空序列容器的主包。我从包 foreach 中取出 where,它生成但将所有包放入每个容器中。我将 GetTag 放在包裹的名称中只是为了确保它正确地拾取它。
<# foreach (var Pckg in RootNode.Packages) { #>
<ExecutePackage Name="EP <#=Pckg.Name#>" DelayValidation="true">
<ExternalProjectPackage Package="<#=Pckg.Name#>.dtsx--<#=Pckg.GetTag("PackageSchema")#>--<#=SchemaNode.Name#>">
标签被放入包名中,但它周围有很多空间。
<ExecutePackage Name="EP Application_TransactionTypes" DelayValidation="true">
<ExternalProjectPackage Package="Application_TransactionTypes.dtsx-- Application --Application" />
</ExecutePackage>
<ExecutePackage Name="EP Purchasing_PurchaseOrderLines" DelayValidation="true">
<ExternalProjectPackage Package="Purchasing_PurchaseOrderLines.dtsx-- Purchasing --Application" />
</ExecutePackage>
所以我猜测填充值是 RootNode.Packages.Where 与模式名称不匹配的原因。我不知道如何修剪空间。我尝试将 trim() 放在不同的地方,但 BIML 引擎抱怨它。通过在 BIML 中的实际注释前面取出制表符,我能够摆脱前导空格,但它仍然填充结尾。
关于为什么要填充标签的任何想法,或者我可能完全不在此处,而不是标签周围的空格。