如何在 TeamCity 的 Kotlin DSL 中引用全局表达式?

How Do I Reference a Global Expression in TeamCity's Kotlin DSL?

我正在尝试在我的 settings.kts(下图)中的一个全球位置使用一个名为 myList 的字符串列表(选项),因为我正在努力使其更易于维护,但是我不断收到此错误 Expression is inaccessible from a nested class 'MySubProject'。我一直在阅读有关 Kotlin 以及如何使用它的信息,但我一直无法弄清楚这一点。也许有一些 Kotlin 或 TeamCity DSL 经验的人可以帮助我?

import jetbrains.buildServer.configs.kotlin.v2019_2.project
import jetbrains.buildServer.configs.kotlin.v2019_2.Project

var myList = listOf("Option 1", "Option 2")

project {

        params {
            select("system.MyOption",
                    myList[0],
                    label = "My Option",
                    description = "It's an option.",
                    options = myList)
    }

    subProject(MySubProject)
}

object MySubProject : Project ({
    params {
        select("system.MySubOption",
                myList[0],
                label = "My Sub Option",
                description = "It's another option.",
                options = myList)
    }
})

所以我最终做的是像这样声明对象:

object MyGlobalConfig {
    var myList = listOf("Option 1", "Option 2")
}

然后像这样在脚本的其他部分引用该值:

project {

        params {
            select("system.MyOption",
                    MyGlobalConfig.myList[0],
                    label = "My Option",
                    description = "It's an option.",
                    options = MyGlobalConfig.myList)
    }

    subProject(MySubProject)
}

object MySubProject : Project ({
    params {
        select("system.MySubOption",
                MyGlobalConfig.myList[0],
                label = "My Sub Option",
                description = "It's another option.",
                options = MyGlobalConfig.myList)
    }
})

它有效,是我能想到的最好的方法。