7

在 F# 中,使用预定义标识符https://stackoverflow.com/a/4861029/2583080相当容易__SOURCE_DIRECTORY__

但是,此标识符在 C# 脚本(csx 文件或 C# Interactive)中不起作用。

> __SOURCE_DIRECTORY__

(1,1):错误 CS0103:名称 '__SOURCE_DIRECTORY__' 在当前上下文中不存在

以更传统的方式获取当前目录也不起作用。

  1. Directory.GetCurrentDirectory()

    回报:C:\Users\$USER_NAME$\

  2. new Uri(System.Reflection.Assembly.GetExecutingAssembly().CodeBase).LocalPath;

    回报:C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\IDE\CommonExtensions\Microsoft\ManagedLanguages\VBCSharp\InteractiveComponents\

4

2 回答 2

8

在 C# 中,您可以利用调用者信息属性(自 C# 5 / VS2012 起可用)。只需声明一个这样的方法:

string GetCurrentFileName([System.Runtime.CompilerServices.CallerFilePath] string fileName = null)
{
    return fileName;
}

并在不指定可选参数的情况下调用它:

string scriptPath = GetCurrentFileName(); // /path/to/your/script.csx
于 2017-10-15T20:23:19.937 回答
1

在 csx 中,您可以像这样添加ExecutionContext参数并FunctionDirectory从中访问:

using System;
using Microsoft.Azure.WebJobs;

public static void Run(TimerInfo myTimer, ExecutionContext executionContext, ILogger log) {
    var dir = executionContext.FunctionDirectory;

    log.LogInformation($"Directory: {dir}");
}

ExecutionContext.FunctionDirectory将返回包含函数function.json文件的目录。它不包括尾随 .

目前,似乎是ExecutionContext.


我正在尝试自己找到这个问题的答案,这是我之前的答案。

在 csx 中,以下辅助方法将返回“包含调用者的源文件的目录”

using System.IO;

...

public static string CallerDirectory([System.Runtime.CompilerServices.CallerFilePath] string fileName = null)
{
    return Path.GetDirectoryName(fileName);
}

要调用它,请不要指定 fileName 参数。

var dir = CallerDirectory();
于 2021-10-02T04:44:22.830 回答