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); } }
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 InsertXamlCSFile(string scriptFile, string projFile, string xamlSrcFile) { string srcFile = scriptFile; if (VS90IDE.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 RemoveFile(string file, string projFile) { try { VSProjectDoc doc = new VSProjectDoc(projFile); XmlNode node = doc.SelectFirstNode("//Project/ItemGroup/Compile[@Include='" + file + "']"); node.ParentNode.RemoveChild(node); doc.Save(projFile); } catch (Exception e) { MessageBox.Show("Specified file could not be inserted to the temp project:\n" + e.Message); } }
public void InsertReference(string asmFile, string projFile) { string refFile = asmFile; if (VS90IDE.isolating || asmFile.IndexOf("assembly\\GAC") != -1 || asmFile.IndexOf("assembly/GAC") != -1) refFile = Path.GetFileName(refFile); //remove absolute path try { //<Reference Include="CSScriptLibrary"> // <SpecificVersion>False</SpecificVersion> // <HintPath>..\VS9.0\CSScriptLibrary.dll</HintPath> //</Reference> VSProjectDoc doc = new VSProjectDoc(projFile); //Create a new node. XmlElement elem = doc.CreateElement("Reference"); XmlAttribute newAttr; newAttr = doc.CreateAttribute("Include"); newAttr.Value = Path.GetFileNameWithoutExtension(refFile); elem.Attributes.Append(newAttr); XmlElement elemSpecVer = doc.CreateElement("SpecificVersion"); elemSpecVer.InnerText = "False"; elem.AppendChild(elemSpecVer); XmlElement elemPath = doc.CreateElement("HintPath"); elemPath.InnerText = refFile; elem.AppendChild(elemPath); doc.SelectFirstNode("//Project/ItemGroup").AppendChild(elem); doc.Save(projFile); } catch (Exception e) { MessageBox.Show("Specified reference could not be inserted into the temp project:\n" + e.Message); } }
public void InsertResource(string file, string projFile) { //<EmbeddedResource Include="Workflow1.layout"> // <DependentUpon>Workflow1.cs</DependentUpon> //</EmbeddedResource> VSProjectDoc doc = new VSProjectDoc(projFile); XmlElement group = doc.CreateElement("ItemGroup"); XmlElement res = doc.CreateElement("EmbeddedResource"); XmlAttribute newAttr; newAttr = doc.CreateAttribute("Include"); newAttr.Value = file; res.Attributes.Append(newAttr); XmlElement dependency = doc.CreateElement("DependentUpon"); dependency.InnerText = Path.ChangeExtension(Path.GetFileName(file), ".cs"); res.AppendChild(dependency); group.AppendChild(res); doc.SelectFirstNode("//Project").AppendChild(group); doc.Save(projFile); }
public void InsertProjectTypeGuids(string guids, string projFile) { //<ProjectTypeGuids>{14822709-B5A1-4724-98CA-57A101D1B079};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids> VSProjectDoc doc = new VSProjectDoc(projFile); XmlElement elem = doc.CreateElement("ProjectTypeGuids"); elem.InnerXml = guids; doc.SelectFirstNode("//Project/PropertyGroup/Configuration").ParentNode.AppendChild(elem); doc.Save(projFile); }
public void InsertPreBuildEvent(string commands, string projFile) { //<PropertyGroup> //<PreBuildEvent> //cscs.exe "C:\cs-script\Dev\Macros C#\precompile.cs" "C:\cs-script\Dev\Macros C#\code.cs" //</PreBuildEvent> //</PropertyGroup> VSProjectDoc doc = new VSProjectDoc(projFile); XmlElement elem = doc.CreateElement("PropertyGroup"); XmlElement elem1 = doc.CreateElement("PreBuildEvent"); elem1.InnerXml = commands; elem.AppendChild(elem1); doc.SelectFirstNode("//Project").AppendChild(elem); doc.Save(projFile); }
public void InsertImport(string importStr, string projFile) { //<Import Project="$(MSBuildBinPath)\Microsoft.WinFX.targets" /> VSProjectDoc doc = new VSProjectDoc(projFile); XmlElement elem = doc.CreateElement("Import"); XmlAttribute newAttr; newAttr = doc.CreateAttribute("Project"); newAttr.Value = importStr; elem.Attributes.Append(newAttr); XmlNode node = doc.SelectFirstNode("//Project"); node.AppendChild(elem); doc.Save(projFile); }
public void InsertFile(string scriptFile, string projFile, string resxSrcFile, string parentFile) { string srcFile = scriptFile; if (VS90IDE.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 InsertAppConfig(string appConfigFile, string projFile) { string destFile = Path.Combine(Path.GetDirectoryName(projFile), "app.config"); if (File.Exists(destFile)) { File.SetAttributes(destFile, FileAttributes.Normal); File.Delete(destFile); } using (StreamReader sr = new StreamReader(appConfigFile)) using (StreamWriter sw = new StreamWriter(destFile)) { sw.Write(sr.ReadToEnd()); sw.WriteLine("<!-- read-only copy of " + appConfigFile + " -->"); } File.SetAttributes(destFile, FileAttributes.ReadOnly); try { VSProjectDoc doc = new VSProjectDoc(projFile); XmlElement group = doc.CreateElement("ItemGroup"); XmlElement none = doc.CreateElement("None"); XmlAttribute attr = doc.CreateAttribute("Include"); attr.Value = "app.config"; group.AppendChild(none); none.Attributes.Append(attr); doc.SelectFirstNode("//Project").AppendChild(group); doc.Save(projFile); } catch (Exception e) { MessageBox.Show("Specified file could not be inserted to the temp project:\n" + e.Message); } }