C# 用于脚本文件的脚本 (csx) 位置
C# for scripting (csx) location of script file
在 F# 中,使用预定义标识符非常容易 __SOURCE_DIRECTORY__
但是,此标识符在 C# 脚本(csx 文件或 C# Interactive)中不起作用。
> __SOURCE_DIRECTORY__
(1,1): error CS0103: The name '__SOURCE_DIRECTORY__' does not exist in the current context
以更传统的方式获取当前目录也不起作用。
Directory.GetCurrentDirectory()
Returns: C:\Users$USER_NAME$\
new Uri(System.Reflection.Assembly.GetExecutingAssembly().CodeBase).LocalPath;
Returns: C:\Program Files (x86)\Microsoft Visual Studio17\Professional\Common7\IDE\CommonExtensions\Microsoft\ManagedLanguages\VBCSharp\InteractiveComponents\
在 C# 中,您可以利用 caller information 属性(自 C# 5 / VS2012 起可用)。只需像这样声明一个方法:
string GetCurrentFileName([System.Runtime.CompilerServices.CallerFilePath] string fileName = null)
{
return fileName;
}
并且在不指定可选参数的情况下调用它:
string scriptPath = GetCurrentFileName(); // /path/to/your/script.csx
在 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
将 return 包含函数的 function.json
文件的目录。它不包括尾随 .
此时 this 似乎是 ExecutionContext
的最佳文档。
我正在尝试自己寻找这个问题的答案,这是我之前的答案。
在csx中,下面的辅助方法将return目录"of the source file that contains the caller".
using System.IO;
...
public static string CallerDirectory([System.Runtime.CompilerServices.CallerFilePath] string fileName = null)
{
return Path.GetDirectoryName(fileName);
}
要调用它,请不要指定 fileName 参数。
var dir = CallerDirectory();
在 F# 中,使用预定义标识符非常容易 __SOURCE_DIRECTORY__
但是,此标识符在 C# 脚本(csx 文件或 C# Interactive)中不起作用。
> __SOURCE_DIRECTORY__
(1,1): error CS0103: The name '__SOURCE_DIRECTORY__' does not exist in the current context
以更传统的方式获取当前目录也不起作用。
Directory.GetCurrentDirectory()
Returns:
C:\Users$USER_NAME$\
new Uri(System.Reflection.Assembly.GetExecutingAssembly().CodeBase).LocalPath;
Returns:
C:\Program Files (x86)\Microsoft Visual Studio17\Professional\Common7\IDE\CommonExtensions\Microsoft\ManagedLanguages\VBCSharp\InteractiveComponents\
在 C# 中,您可以利用 caller information 属性(自 C# 5 / VS2012 起可用)。只需像这样声明一个方法:
string GetCurrentFileName([System.Runtime.CompilerServices.CallerFilePath] string fileName = null)
{
return fileName;
}
并且在不指定可选参数的情况下调用它:
string scriptPath = GetCurrentFileName(); // /path/to/your/script.csx
在 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
将 return 包含函数的 function.json
文件的目录。它不包括尾随 .
此时 this 似乎是 ExecutionContext
的最佳文档。
我正在尝试自己寻找这个问题的答案,这是我之前的答案。
在csx中,下面的辅助方法将return目录"of the source file that contains the caller".
using System.IO;
...
public static string CallerDirectory([System.Runtime.CompilerServices.CallerFilePath] string fileName = null)
{
return Path.GetDirectoryName(fileName);
}
要调用它,请不要指定 fileName 参数。
var dir = CallerDirectory();