private bool HasAdditionalFile(ProjectItem projectItem, string additionalFileName, out string conflictingAdditionalFilePath) { if (additionalFileName.Equals(Path.GetFileName(projectItem.FileNames[0]), StringComparison.OrdinalIgnoreCase)) { var itemTypeProperty = VsShellUtils.FindProperty(projectItem.Properties, Constants.ItemTypePropertyKey); var isMarkedAsAdditionalFile = Constants.AdditionalFilesItemTypeName.Equals(itemTypeProperty.Value?.ToString(), StringComparison.OrdinalIgnoreCase); if (isMarkedAsAdditionalFile) { var pathProperty = VsShellUtils.FindProperty(projectItem.Properties, Constants.FullPathPropertyKey); conflictingAdditionalFilePath = pathProperty.Value.ToString(); return(true); } } foreach (ProjectItem subItem in projectItem.ProjectItems) { if (HasAdditionalFile(subItem, additionalFileName, out conflictingAdditionalFilePath)) { return(true); } } conflictingAdditionalFilePath = string.Empty; return(false); }
void IProjectSystemHelper.AddFileToProject(Project project, string file, string itemType) { bool addFileToProject = !project.ProjectItems.OfType <ProjectItem>().Any(pi => StringComparer.OrdinalIgnoreCase.Equals(pi.Name, file)); if (addFileToProject) { var item = project.ProjectItems.AddFromFile(file); Property itemTypeProperty = VsShellUtils.FindProperty(item.Properties, Constants.ItemTypePropertyKey); if (itemTypeProperty != null) { itemTypeProperty.Value = itemType; } } }
public bool IsReferenced(Project project, string additionalFilePath) { var fileItem = projectSystemHelper.FindFileInProject(project, additionalFilePath); if (fileItem == null) { return(false); } var property = VsShellUtils.FindProperty(fileItem.Properties, Constants.ItemTypePropertyKey); var isMarkedAsAdditionalFile = Constants.AdditionalFilesItemTypeName.Equals(property.Value?.ToString(), StringComparison.OrdinalIgnoreCase); return(isMarkedAsAdditionalFile); }
internal /* for testing */ static void EnsureItemTypeIsCorrect(ProjectItem projectItem) { try { var property = VsShellUtils.FindProperty(projectItem.Properties, Constants.ItemTypePropertyKey); if (!Constants.AdditionalFilesItemTypeName.Equals(property.Value?.ToString(), StringComparison.OrdinalIgnoreCase)) { // This will fail if the existing item ref isn't in the main project file e.g. if it is in a Directory.Build.props file. // We can't do much about this, other than catch and log the error higher up. property.Value = Constants.AdditionalFilesItemTypeName; } } catch (Exception ex) when(!ErrorHandler.IsCriticalException(ex)) { var message = string.Format(BindingStrings.CSharpVB_FailedToSetSonarLintXmlItemType, projectItem.ContainingProject.FileName, Constants.AdditionalFilesItemTypeName, ex.Message); throw new SonarLintException(message, ex); } }