public static void BuildProject( string outputDirectory, string sourceDirectory, string analyzer, ProjectKind kind, IEnumerable <string> copyFiles, IEnumerable <string> renamedFiles, string projectName, Dictionary <string, IEnumerable <string> > categories, Dictionary <string, Dictionary <string, string> > projectGuids, IList <CheckData> checks) { string target = Path.Combine(outputDirectory, "src", analyzer + ".Analyzers", kind.ToString()); Directory.CreateDirectory(target); // Identically named supporting Files string source = Path.Combine(sourceDirectory, "src", "REPLACE.ME", kind.ToString()); foreach (string copiedFile in copyFiles) { Utilities.CopyFile(source, target, copiedFile); } // Everybody gets an assemblyInfo, except vb and nuget if (kind != ProjectKind.VisualBasic && kind != ProjectKind.NuGet) { Directory.CreateDirectory(Path.Combine(target, "Properties")); Utilities.CopyFile(source, target, @"Properties\AssemblyInfo.cs"); } foreach (string renamedFile in renamedFiles) { if (renamedFile == "REPLACEMEAnalyzersResources.resx") { Debug.Assert(kind == ProjectKind.Core); Debug.Assert(checks != null); } Utilities.CopyRenamedFile(source, target, renamedFile, analyzer, checks, categories, projectGuids); } Dictionary <string, string> analyzerGuids; if (!projectGuids.TryGetValue(kind.ToString(), out analyzerGuids)) { projectGuids[kind.ToString()] = analyzerGuids = new Dictionary <string, string>(); } analyzerGuids[analyzer] = Utilities.CopyRenamedFile(source, target, projectName, analyzer, checks, categories, projectGuids); Utilities.CreateStubFiles(kind, target, analyzer, checks, categories); }
private static void AddCompileItemsToProjectFile(string projFile, ProjectKind kind, CheckData check) { XDocument xmlFile = XDocument.Load(projFile); Debug.Assert(xmlFile.Root.Name.LocalName == "Project"); var first = xmlFile.Root.Descendants().Where(c => c.Name.LocalName == "Compile").First(); var parent = first.Parent; XElement elem = null; switch (kind) { case ProjectKind.Core: elem = new XElement(first); elem.SetAttributeValue("Include", CodeTemplates.GenerateAnalyzerFileName(check)); parent.Add(elem); elem = new XElement(first); elem.SetAttributeValue("Include", CodeTemplates.GenerateCodeFixFileName(check)); parent.Add(elem); break; case ProjectKind.CSharp: elem = new XElement(first); elem.SetAttributeValue("Include", CodeTemplates.GenerateCSharpAnalyzerFileName(check)); parent.Add(elem); elem = new XElement(first); elem.SetAttributeValue("Include", CodeTemplates.GenerateCSharpCodeFixFileName(check)); parent.Add(elem); break; case ProjectKind.VisualBasic: elem = new XElement(first); elem.SetAttributeValue("Include", CodeTemplates.GenerateBasicAnalyzerFileName(check)); parent.Add(elem); elem = new XElement(first); elem.SetAttributeValue("Include", CodeTemplates.GenerateBasicCodeFixFileName(check)); parent.Add(elem); break; case ProjectKind.UnitTests: elem = new XElement(first); elem.SetAttributeValue("Include", CodeTemplates.GenerateAnalyzerTestsFileName(check)); parent.Add(elem); elem = new XElement(first); elem.SetAttributeValue("Include", CodeTemplates.GenerateCodeFixTestsFileName(check)); parent.Add(elem); break; default: throw new ArgumentException(kind.ToString()); } xmlFile.Save(projFile); return; }
public static void BuildProject( string outputDirectory, string sourceDirectory, string analyzer, ProjectKind kind, IEnumerable<string> copyFiles, IEnumerable<string> renamedFiles, string projectName, Dictionary<string, IEnumerable<string>> categories, Dictionary<string, Dictionary<string, string>> projectGuids, IList<CheckData> checks) { string target = Path.Combine(outputDirectory, "src", analyzer + ".Analyzers", kind.ToString()); Directory.CreateDirectory(target); // Identically named supporting Files string source = Path.Combine(sourceDirectory, "src", "REPLACE.ME", kind.ToString()); foreach (string copiedFile in copyFiles) { Utilities.CopyFile(source, target, copiedFile); } // Everybody gets an assemblyInfo, except vb and nuget if (kind != ProjectKind.VisualBasic && kind != ProjectKind.NuGet) { Directory.CreateDirectory(Path.Combine(target, "Properties")); Utilities.CopyFile(source, target, @"Properties\AssemblyInfo.cs"); } foreach (string renamedFile in renamedFiles) { if (renamedFile == "REPLACEMEAnalyzersResources.resx") { Debug.Assert(kind == ProjectKind.Core); Debug.Assert(checks != null); } Utilities.CopyRenamedFile(source, target, renamedFile, analyzer, checks, categories, projectGuids); } Dictionary<string, string> analyzerGuids; if (!projectGuids.TryGetValue(kind.ToString(), out analyzerGuids)) { projectGuids[kind.ToString()] = analyzerGuids = new Dictionary<string, string>(); } analyzerGuids[analyzer] = Utilities.CopyRenamedFile(source, target, projectName, analyzer, checks, categories, projectGuids); Utilities.CreateStubFiles(kind, target, analyzer, checks, categories); }