预期在 biml 中使用 c#

} expected using c# in biml

我在 visual studio 中编写 biml,在使用 c# 时遇到问题。 我收到一条错误消息,指出“} expected”指向 if 语句的右括号,但我找不到遗漏的地方。 我是新手,知道可能还有其他错误:)

               <#foreach(var order in metaData.Attributes.Select(x => x.ORDER).Distinct()){#>
                    <Container Name="Sequence Container_<#=order#>">
                        <PrecedenceConstraints>
                            <#if (order == "0"){#>
                                <Inputs>
                                    <Input OutputPathName="Set IDRunMaster.Output"/>
                                </Inputs>
                            <#}#>
                            <#else{#>
                                <#int previousOrder = Int32.Parse(order) - 1;#>
                                <Inputs>
                                    <Input OutputPathName="Sequence Container_<#previousOrder#>"/>
                                </Inputs> 
                            <#}#>
                        </PrecedenceConstraints>
                        <Tasks>
                            <#foreach(var item in  metaData.Attributes.Where(y => y.ORDER == order).Select(x => x.ORIGINAL_OBJECT).Distinct()){#>
                                <ExecutePackage Name="DWH_<#=item#>">
                                    <ExternalProjectPackage Package="DWH_<#=item#>.dtsx" />
                                </ExecutePackage>
                            <#}#>
                        </Tasks>
                    </Container>
                <#}#>

第一个语法错误(未报告)

<Input OutputPathName="Sequence Container_<#previousOrder#>"/>

你在这里漏掉了一个分号,或者你打算在这里使用 <#=

<Input OutputPathName="Sequence Container_<#=previousOrder#>"/>

报告的错误很奇怪,虽然我没有完全清醒,但我看不出根本原因是什么。

我的方法是将您的代码格式化为我的大脑对大括号放置的期望。

这段代码还有不匹配的错误{

<#
// TODO: definition of metaData
// Needs to have ORDER and ORIGINAL_OBJECT attributes and be LINQable

#>
<Biml xmlns="http://schemas.varigence.com/biml.xsd">
    <Packages>
        <Package Name="SO_70679838">
            <Tasks>
<#
               foreach(var order in metaData.Attributes.Select(x => x.ORDER).Distinct())
                 {
#>
                    <Container Name="Sequence Container_<#=order#>">
                        <PrecedenceConstraints>
<#
                            if (order == "0")
                            {
#>
                                <Inputs>
                                    <Input OutputPathName="Set IDRunMaster.Output"/>
                                </Inputs>
<#
                            }
#>
                            <#
                            else{
#>
                                <#int previousOrder = Int32.Parse(order) - 1;#>
                                <Inputs>
                                    <Input OutputPathName="Sequence Container_<#=previousOrder#>"/>
                                </Inputs> 
                            <#}#>
                        </PrecedenceConstraints>
                        <Tasks>
                            <#foreach(var item in  metaData.Attributes.Where(y => y.ORDER == order).Select(x => x.ORIGINAL_OBJECT).Distinct()){#>
                                <ExecutePackage Name="DWH_<#=item#>">
                                    <ExternalProjectPackage Package="DWH_<#=item#>.dtsx" />
                                </ExecutePackage>
                            <#}#>
                        </Tasks>
                    </Container>
                <#}#>
            </Tasks>
        </Package>
    </Packages>
</Biml>

这个,不会

<#
// TODO: definition of metaData
// Needs to have ORDER and ORIGINAL_OBJECT attributes and be LINQable

#>
<Biml xmlns="http://schemas.varigence.com/biml.xsd">
    <Packages>
        <Package Name="SO_70679838">
            <Tasks>
<#
               foreach(var order in metaData.Attributes.Select(x => x.ORDER).Distinct())
                 {
#>
                    <Container Name="Sequence Container_<#=order#>">
                        <PrecedenceConstraints>
<#
                            if (order == "0")
                            {
#>
                                <Inputs>
                                    <Input OutputPathName="Set IDRunMaster.Output"/>
                                </Inputs>
<#
                            }
#>
<#
                            else{
#>
                                <#int previousOrder = Int32.Parse(order) - 1;#>
                                <Inputs>
                                    <Input OutputPathName="Sequence Container_<#=previousOrder#>"/>
                                </Inputs> 
                            <#}#>
                        </PrecedenceConstraints>
                        <Tasks>
                            <#foreach(var item in  metaData.Attributes.Where(y => y.ORDER == order).Select(x => x.ORIGINAL_OBJECT).Distinct()){#>
                                <ExecutePackage Name="DWH_<#=item#>">
                                    <ExternalProjectPackage Package="DWH_<#=item#>.dtsx" />
                                </ExecutePackage>
                            <#}#>
                        </Tasks>
                    </Container>
                <#}#>
            </Tasks>
        </Package>
    </Packages>
</Biml>

我所做的只是删除 else 子句中指令前面的前导 space。

回到你原来的版本,同样的事情。所以,第 17 行的 某些东西 让事情变得一团糟,但由于我没有最小的工作复制,我不能肯定地说你错了什么。

<#
// TODO: definition of metaData
// Needs to have ORDER and ORIGINAL_OBJECT attributes and be LINQable
#>
<Biml xmlns="http://schemas.varigence.com/biml.xsd">
    <Packages>
        <Package Name="SO_70679838">
            <Tasks>
              <#foreach(var order in metaData.Attributes.Select(x => x.ORDER).Distinct()){#>
                    <Container Name="Sequence Container_<#=order#>">
                        <PrecedenceConstraints>
                            <#if (order == "0"){#>
                                <Inputs>
                                    <Input OutputPathName="Set IDRunMaster.Output"/>
                                </Inputs>
                            <#}#>
<#else{#>
                                <#int previousOrder = Int32.Parse(order) - 1;#>
                                <Inputs>
                                    <Input OutputPathName="Sequence Container_<#=previousOrder#>"/>
                                </Inputs> 
                            <#}#>
                        </PrecedenceConstraints>
                        <Tasks>
                            <#foreach(var item in  metaData.Attributes.Where(y => y.ORDER == order).Select(x => x.ORIGINAL_OBJECT).Distinct()){#>
                                <ExecutePackage Name="DWH_<#=item#>">
                                    <ExternalProjectPackage Package="DWH_<#=item#>.dtsx" />
                                </ExecutePackage>
                            <#}#>
                        </Tasks>
                    </Container>
                <#}#>   
            </Tasks>
        </Package>
    </Packages>
</Biml>

您也可以通过以下方法使错误消失,但仍然只是用绷带包扎猎枪伤口

                        <#if (order == "0"){#>
                            <Inputs>
                                <Input OutputPathName="Set IDRunMaster.Output"/>
                            </Inputs>
                        <#}else{#>

这不是 python 或 FORTRAN,所以白人 space 不应该是罪魁祸首,但是,我们到了