Skip to content

Instantly share code, notes, and snippets.

@sailro
Created October 2, 2014 08:09
Show Gist options
  • Save sailro/3b8080394d50c38459f8 to your computer and use it in GitHub Desktop.
Save sailro/3b8080394d50c38459f8 to your computer and use it in GitHub Desktop.
Fix an assembly reference in a Visual Studio Tools for Unity project
using System;
using System.IO;
using System.Linq;
using System.Text;
using System.Xml.Linq;
using UnityEditor;
using SyntaxTree.VisualStudio.Unity.Bridge;
using UnityEngine;
[InitializeOnLoad]
public class ProjectFileHook
{
// necessary for XLinq to save the xml project file in utf8
class Utf8StringWriter : StringWriter
{
public override Encoding Encoding
{
get { return Encoding.UTF8; }
}
}
static void ProcessNodesWithIncludeAttribute(XDocument document, string localName, string includeValue, Action<XElement> action)
{
var nodes = document
.Descendants()
.Where(p => p.Name.LocalName == localName);
foreach (var node in nodes)
{
var xa = node.Attribute("Include");
if (xa != null && !string.IsNullOrEmpty(xa.Value) && string.Equals(xa.Value, includeValue))
{
action(node);
}
}
}
static void RemoveFileFromProject(XDocument document, string fileName)
{
ProcessNodesWithIncludeAttribute(document, "None", fileName, element => element.Remove());
}
static void RemoveHintPathFromReference(XDocument document, string assemblyName)
{
ProcessNodesWithIncludeAttribute(document, "Reference", assemblyName, element => element.Nodes().Remove());
}
static ProjectFileHook()
{
ProjectFilesGenerator.ProjectFileGeneration += (string name, string content) =>
{
var document = XDocument.Parse(content);
RemoveFileFromProject(document, @"Assets\System.Runtime.Serialization.dll");
RemoveHintPathFromReference(document, "System.Runtime.Serialization.dll");
var str = new Utf8StringWriter();
document.Save(str);
return str.ToString();
};
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment