Skip to content

Instantly share code, notes, and snippets.

@andybak
Created August 29, 2019 07:43
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save andybak/1973ba4fdee5e215ecb28f0db7f0aadb to your computer and use it in GitHub Desktop.
Save andybak/1973ba4fdee5e215ecb28f0db7f0aadb to your computer and use it in GitHub Desktop.
// <copyright file="UpdateShaderGraphAssemblyInfo.cs" company="BovineLabs">
// Copyright (c) BovineLabs. All rights reserved.
// </copyright>
namespace BovineLabs.Vision.Editor.ShaderGraph
{
using System;
using System.IO;
using System.Linq;
using UnityEditor;
using UnityEditor.Compilation;
/// <summary>
/// Adds our assembly to the shader graph AssemblyInfo to give us internal access. A nasty hack required for now.
/// </summary>
[InitializeOnLoad]
public static class UpdateShaderGraphAssemblyInfo
{
private const string ShaderGraphAssemblyName = "Unity.ShaderGraph.Editor";
private const string AssemblyInfoName = "AssemblyInfo.cs";
// This line should refer to your own assembly
private const string VisibleLine = "[assembly: InternalsVisibleTo(\"BovineLabs.Vision.Editor\")]";
static UpdateShaderGraphAssemblyInfo()
{
CompilationPipeline.assemblyCompilationStarted += OnAssemblyCompilationStarted;
}
private static void OnAssemblyCompilationStarted(string assemblyName)
{
var asmdef = CompilationPipeline.GetAssemblyDefinitionFilePathFromAssemblyName(assemblyName);
var name = Path.GetFileNameWithoutExtension(asmdef);
if (name == null || !name.Equals(ShaderGraphAssemblyName))
{
return;
}
var directory = Path.GetDirectoryName(asmdef);
var assemblyInfoPath = Path.Combine(directory ?? throw new NullReferenceException(), AssemblyInfoName);
var assemblyInfo = File.ReadAllLines(assemblyInfoPath);
// Already setup
if (assemblyInfo.Contains(VisibleLine))
{
return;
}
TurnOffReadOnly(assemblyInfoPath);
File.AppendAllText(assemblyInfoPath, VisibleLine);
}
private static void TurnOffReadOnly(string file)
{
File.SetAttributes(file, File.GetAttributes(file) & ~FileAttributes.ReadOnly);
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment