Я каким-то образом получил свой проект в состоянии, когда каждый из моих компонентов не может быть удален.Понятия не имею как.Я написал программу, которая примет файл .wixproj и заменит все GUID компонентов на новые GUID, и это решило проблему (после того, как я вручную удалил файлы).Это основано на ответе пользователя 593287.
Аргумент должен быть путем к файлу вашего проекта.Пример запуска этого из командной строки:
GuidFixer.exe MyProject.csproj
using System;
using System.Collections.Generic;
using System.IO;
using System.Xml;
namespace GuidFixer
{
public class Program
{
public static void Main(string[] args)
{
string projectFileName = args[0];
string path = Path.GetDirectoryName(projectFileName);
List<string> files = new List<string>();
XmlDocument projectDocument = new XmlDocument();
projectDocument.Load(projectFileName);
XmlNamespaceManager manager = new XmlNamespaceManager(projectDocument.NameTable);
manager.AddNamespace("msbld", "http://schemas.microsoft.com/developer/msbuild/2003");
// Finds all of the files included in the project.
XmlNodeList nodes = projectDocument.SelectNodes("/msbld:Project/msbld:ItemGroup/msbld:Compile", manager);
foreach (XmlNode node in nodes)
{
string fileName = Path.Combine(path, node.Attributes["Include"].Value);
files.Add(fileName);
}
foreach (string fileName in files)
{
// Lets only do .wxs files
if (!Path.GetExtension(fileName).Equals(".wxs", StringComparison.CurrentCulture))
{
continue;
}
// This will only update files that aren't readonly, make sure
// you check out your files from source control before running.
FileAttributes attributes = File.GetAttributes(fileName);
if ((attributes & FileAttributes.ReadOnly) == FileAttributes.ReadOnly)
{
continue;
}
bool modified = false;
XmlDocument doc = new XmlDocument();
doc.PreserveWhitespace = true; // space inside tags are still lost
doc.Load(fileName);
foreach (XmlNode node in doc.GetElementsByTagName("Component"))
{
Guid guid = Guid.NewGuid();
string value = guid.ToString("B").ToUpper();
node.Attributes["Guid"].Value = value;
modified = true;
}
// Only update files that were modified, to preserve formatting.
if (modified)
{
doc.Save(fileName);
}
}
}
}
}
Я внес в него некоторые изменения, не проверяя его, так что удачи, это довольно просто.