使用.csx
执行C#脚本(C:\Program Files (x86)\MSBuild\14.0\Bin\amd64\csi.exe
)时,如何获取正在执行的脚本的路径?
该行
Console.WriteLine(AppDomain.CurrentDomain.BaseDirectory);
打印解释器(csi.exe
)的路径,而不是脚本。
脚本应该在某个级别知道它的路径,因为您可以使用这样的相对路径加载程序集:
#r "..\\bla\\asdf.dll"
答案 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
}
}