如何通过FileNames属性

时间:2016-01-19 18:13:35

标签: c# .net visual-studio envdte

我正在尝试从ProjectItem中提取文件名,并且已经找到了一些内容:

  • 使用projectItem.Properties.Item("FullPath").Value.ToString()有时会失败,即使用HTML文件。
  • 使用projectItem.FileNames[0]似乎是解决方案,它适用于项目中的所有类型的文件。

但是当尝试从解决方案文件(直接保存在解决方案文件夹中而不是项目中)中获取文件路径时,调用失败并显示ArgumentException。稍后我进行了一些调查和反复试验,我似乎找到了原因:对于解决方案文件,FileNames属性是基于1的,而不是基于0的。现在我完全迷失了,没有看到这一切背后的系统。我目前的解决方案是:

  1. 检查项目项的Kind是否等于VSConstants.GUID_ItemType_PhysicalFile(那么它是“常规”文件)。如果是,请返回projectItem.FileNames[0]
  2. 在所有其他情况下,请返回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}");
    }
    
  3. 这是详尽的还是我错过了什么?从ProjectItem获取文件名真的很烦人且不安全吗?

0 个答案:

没有答案