Это потому, что:
a) Linux использует '\' в качестве разделителя каталогов, в то время как Windows использует '/'
b) CallerFilePath возвращает путь во время компиляции.Код был скомпилирован в Windows, а не в Linux.
Итак, вы получите filePath = C:\web\src\production\MyWebsite\Controllers\ChallengeController.cs
Обходной путь для этого - написать свой собственный метод для получения имени файла, например:
static void Main(string[] args)
{
char DirectorySeparatorChar='\\';
string path = @"C:\web\src\production\MyWebsite\Controllers\ChallengeController.cs";
string fileName = GetFileNameWithoutExtension(path, DirectorySeparatorChar);
}
public static String GetFileName(String path,char DirectorySeparatorChar)
{
if (path != null)
{
int length = path.Length;
for (int i = length; --i >= 0;)
{
char ch = path[i];
if (ch == DirectorySeparatorChar )
return path.Substring(i + 1, length - i - 1);
}
}
return path;
}
public static String GetFileNameWithoutExtension(String path, char DirectorySeparatorChar)
{
path = GetFileName(path, DirectorySeparatorChar);
if (path != null)
{
int i;
if ((i = path.LastIndexOf('.')) == -1)
return path;
else
return path.Substring(0, i);
}
return null;
}`