我正在将表中的架构转储到包的标签注释中。
<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>
当它运行时,我得到一个包含空序列容器的Master包。我从包foreach中取出了它的位置,然后生成但是将所有包放在每个容器中。我把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中的实际注释前面取出标签来摆脱前导空格,但它仍然填补了结尾。
关于为什么标签被填充的任何想法,或者我可能完全偏离这里并且它不是标签周围的空间。
答案 0 :(得分:1)
这是Biml / XML格式在背后咬你的丑陋地方之一
<Annotation AnnotationType="Tag" Tag="PackageSchema">
<#=Table.Schema#>
</Annotation>
如果你将这个定义更改为以下内容,那就做了所有事情&#34;神奇地&#34;工作?
<Annotation AnnotationType="Tag" Tag="PackageSchema"><#=Table.Schema#></Annotation>
我假设是因为我遇到了与包参数类似的问题......