我已经创建了一个PCL(可移植类库)来为我的应用程序做一些日志记录,并且有方法:
public static void EnterPage([CallerFilePath]string memberName = "")
{
var file = System.IO.Path.GetFileName(memberName);
Track(file);
}
memberName = "d:\\teamFoundation\\MyApp\\MyApp-Reporting\\MyApp.Core\\App.cs"
和GetFileName
返回完整路径 - d:\\teamFoundation\\MyApp\\MyApp-Reporting\\MyApp.Core\\App.cs
而不是App.cs
有什么理由说这不适用于PCL吗?我目前正在Android
设备上运行
答案 0 :(得分:4)
在Windows上,Path
分隔符为\
,但Android
从android documentation,您可以看到分隔符实际为/
,这与iOS
memberName
的值在编译时传递,因此取决于您构建解决方案的计算机的类型。调用System.IO.Path.GetFileName
的地方在运行时完成。
因此,要解决此问题,您必须替换文件路径中的分隔符:
public static void EnterPage([CallerFilePath]string memberName = "")
{
char seperatorChar = (char)typeof(System.IO.Path).GetTypeInfo().GetDeclaredField("DirectorySeparatorChar").GetValue(null);
var file = System.IO.Path.GetFileNameWithoutExtension(memberName.Replace('\\', seperatorChar));
Track(file);
}
答案 1 :(得分:1)
如果跨平台工作,您将需要手动执行此操作。 memberName
的值在编译时传递,其中System.IO.Path.GetFileName
的调用在运行时完成。 Windows和Android之间的路径分隔符是不同的。