public void InsertXamlCSFile(string scriptFile, string projFile, string xamlSrcFile) { string srcFile = scriptFile; if (VS100IDE.isolating) srcFile = Path.GetFileName(srcFile); //remove absolute path try { VSProjectDoc doc = new VSProjectDoc(projFile); //Create a new node. XmlElement elem = doc.CreateElement(srcFile.EndsWith(".xaml") ? "Page" : "Compile"); XmlAttribute newAttr; newAttr = doc.CreateAttribute("Include"); newAttr.Value = srcFile; elem.Attributes.Append(newAttr); //<DependentUpon>Window1.xaml</DependentUpon> XmlElement nestedElem = doc.CreateElement("DependentUpon"); nestedElem.InnerText = Path.GetFileName(xamlSrcFile); elem.AppendChild(nestedElem); doc.SelectNodes("//Project/ItemGroup")[1].AppendChild(elem); doc.Save(projFile); } catch (Exception e) { MessageBox.Show("Specified file could not be inserted to the temp project:\n" + e.Message); } }
public void InsertFile(string scriptFile, string projFile, string resxSrcFile, string parentFile) { string srcFile = scriptFile; if (VS100IDE.isolating) srcFile = Path.GetFileName(srcFile); //remove absolute path try { string parent = ""; if (srcFile.ToLower().EndsWith(".designer.cs")) //needs to be dependent on 'base include' { parent = Path.GetFileName(srcFile); parent = parent.Substring(0, parent.Length - ".designer.cs".Length) + ".cs"; } if (srcFile.ToLower().EndsWith(".g.cs")) //needs to be dependent on 'base include' { parent = Path.GetFileName(srcFile); parent = parent.Substring(0, parent.Length - ".g.cs".Length) + ".cs"; } if (srcFile.ToLower().EndsWith(".part.cs")) //needs to be dependent on 'base include' { parent = Path.GetFileName(srcFile); parent = parent.Substring(0, parent.Length - ".part.cs".Length) + ".cs"; } if (parentFile != null && parentFile != "") parent = parentFile; //<Compile Include="C:\cs-script\Samples\tick.cs" /> //NOTE: VS7.1 is able to create .resx file for linked (not in the .proj directory) .cs files correctly. However VS9.0 can do this only for //non-linked source files. Yes this is a new VS bug. Thus I have to create .resex in case if the file contains //the class inherited from System.Windows.Form. VSProjectDoc doc = new VSProjectDoc(projFile); //Create a new node. XmlElement elem = doc.CreateElement(srcFile.EndsWith(".xaml") ? "Page" : "Compile"); XmlAttribute newAttr; newAttr = doc.CreateAttribute("Include"); newAttr.Value = srcFile; elem.Attributes.Append(newAttr); if (parent != "") { //<DependentUpon>Form1.cs</DependentUpon> XmlElement nestedElem = doc.CreateElement("DependentUpon"); nestedElem.InnerText = Path.GetFileName(parent); elem.AppendChild(nestedElem); } else if (srcFile.ToLower().EndsWith(".includes.cs")) { XmlElement nestedElem = doc.CreateElement("Link"); nestedElem.InnerText = "Includes\\" + Path.GetFileName(srcFile); elem.AppendChild(nestedElem); } XmlNode contentsNode = doc.SelectNodes("//Project/ItemGroup")[1]; contentsNode.AppendChild(elem); if (resxSrcFile != "") { //<EmbeddedResource Include="G:\Dev\WindowsApplication1\Form1.resx"> //<DependentUpon>Form1.cs</DependentUpon> //</EmbeddedResource> string resxFile = Path.ChangeExtension(srcFile, ".resx"); File.Copy(resxSrcFile, Path.Combine(Path.GetDirectoryName(scriptFile), resxFile), true); elem = doc.CreateElement("EmbeddedResource"); newAttr = doc.CreateAttribute("Include"); newAttr.Value = resxFile; elem.Attributes.Append(newAttr); XmlElement nestedElem = doc.CreateElement("DependentUpon"); nestedElem.InnerText = Path.GetFileName(srcFile); elem.AppendChild(nestedElem); contentsNode.AppendChild(elem); } doc.Save(projFile); } catch (Exception e) { MessageBox.Show("Specified file could not be inserted to the temp project:\n" + e.Message); } }
public void SetPlatformType(string type, string file, string solutionFile) { try { //<PlatformTarget>x86</PlatformTarget> VSProjectDoc doc = new VSProjectDoc(file); //Create a new node. XmlNodeList existingElement = doc.SelectNodes("//Project/PropertyGroup/PlatformTarget"); XmlElement elem; if (existingElement.Count > 0) elem = (XmlElement)existingElement[0]; else elem = doc.CreateElement("PlatformTarget"); elem.InnerText = type; XmlNodeList nodes = doc.SelectNodes("//Project/PropertyGroup"); nodes[1].AppendChild(elem); nodes[2].AppendChild(elem.Clone()); doc.Save(file); ReplaceInFile(file, "AnyCPU", "x86"); ReplaceInFile(solutionFile, "AnyCPU", "x86"); ReplaceInFile(solutionFile, "Any CPU", "x86"); } catch (Exception e) { MessageBox.Show("Specified '" + type + "' could not be set for the temp project:\n" + e.Message); } }
public void SetWorkingDir(string dir, string file) { try { //<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> // <StartWorkingDirectory>C:\Program Files\Google\</StartWorkingDirectory> //</PropertyGroup> VSProjectDoc doc = new VSProjectDoc(file); XmlElement elem = doc.CreateElement("StartWorkingDirectory"); elem.InnerText = dir; XmlNodeList nodes = doc.SelectNodes("//Project/PropertyGroup"); nodes[0].AppendChild(elem); nodes[1].AppendChild(elem.Clone()); doc.Save(file); } catch (Exception e) { MessageBox.Show("Specified 'working directory' could not be set for the temp project:\n" + e.Message); } }
public void SetAllowUnsafe(string file) { try { //<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> // <AllowUnsafeBlocks>true</AllowUnsafeBlocks> //</PropertyGroup> VSProjectDoc doc = new VSProjectDoc(file); //Create a new node. XmlElement elem = doc.CreateElement("AllowUnsafeBlocks"); elem.InnerText = "true"; XmlNodeList nodes = doc.SelectNodes("//Project/PropertyGroup"); nodes[1].AppendChild(elem); nodes[2].AppendChild(elem.Clone()); doc.Save(file); } catch (Exception e) { MessageBox.Show("Specified 'unsafe' could not be set for the temp project:\n" + e.Message); } }