我正在尝试从ProjectItem
中提取文件名,并且已经找到了一些内容:
projectItem.Properties.Item("FullPath").Value.ToString()
有时会失败,即使用HTML文件。projectItem.FileNames[0]
似乎是解决方案,它适用于项目中的所有类型的文件。但是当尝试从解决方案文件(直接保存在解决方案文件夹中而不是项目中)中获取文件路径时,调用失败并显示ArgumentException
。稍后我进行了一些调查和反复试验,我似乎找到了原因:对于解决方案文件,FileNames
属性是基于1的,而不是基于0的。现在我完全迷失了,没有看到这一切背后的系统。我目前的解决方案是:
Kind
是否等于VSConstants.GUID_ItemType_PhysicalFile
(那么它是“常规”文件)。如果是,请返回projectItem.FileNames[0]
。在所有其他情况下,请返回projectItem.FileNames[1]
。
var projItemGuid = new Guid(projectItem.Kind);
try
{
return (projItemGuid == VSConstants.GUID_ItemType_PhysicalFile)
? projectItem.FileNames[0]
: projectItem.FileNames[1];
}
catch (Exception e)
{
throw new FileNotFoundException(
$"The file path of {projectItem.Name} could not be retrieved" +
$"\nThe index might be wrong.) \nOriginal exception: {e.Message}");
}
这是详尽的还是我错过了什么?从ProjectItem
获取文件名真的很烦人且不安全吗?