如何获取正在执行的.csx脚本的路径?

时间:2018-01-08 11:57:48

标签: c# csx csi

使用.csx执行C#脚本(C:\Program Files (x86)\MSBuild\14.0\Bin\amd64\csi.exe)时,如何获取正在执行的脚本的路径?

该行

Console.WriteLine(AppDomain.CurrentDomain.BaseDirectory); 

打印解释器(csi.exe)的路径,而不是脚本。

脚本应该在某个级别知道它的路径,因为您可以使用这样的相对路径加载程序集:

#r "..\\bla\\asdf.dll"

1 个答案:

答案 0 :(得分:1)

仅通过使用辅助方法,我可以以编程方式获取.CSX源脚本的完整路径。该方法使用CallerFilePath属性。这可以从交互式Rosalyn C#shell以及命令行内部进行。

import com.datastax.driver.core.Cluster
import io.micronaut.context.ApplicationContext
import io.micronaut.context.event.BeanCreatedEvent
import io.micronaut.context.event.BeanCreatedEventListener
import org.slf4j.Logger
import org.slf4j.LoggerFactory

import javax.inject.Singleton

@Singleton
class ClusterBuilderListener implements BeanCreatedEventListener<Cluster.Builder> {
    private static final Logger LOG = LoggerFactory.getLogger(ClusterBuilderListener.class)

    @Override
    Cluster.Builder onCreated(BeanCreatedEvent<Cluster.Builder> event) {
        def builder = event.getBean()
        ApplicationContext applicationContext = (ApplicationContext) event.getSource()

        if(applicationContext.getEnvironment().getActiveNames().contains('pro') ){
            builder.withCredentials("username", "password")
        }
        return builder
    }
}