├── .gitattributes ├── .gitignore ├── LICENSE ├── README.md └── src └── Assets └── Plugins └── Editor ├── ExampleProjectWeaver ├── ModuleWeaver.cs └── ModuleWeaver.cs.meta ├── Fody ├── FodyAssemblyPostProcessor.cs ├── FodyAssemblyPostProcessor.cs.meta ├── FodyWeavers.xml ├── Mono.Cecil.Mdb.dll ├── Mono.Cecil.Mdb.dll.meta ├── Mono.Cecil.Pdb.dll ├── Mono.Cecil.Pdb.dll.meta ├── Mono.Cecil.Rocks.dll ├── Mono.Cecil.Rocks.dll.meta ├── Mono.Cecil.dll └── Mono.Cecil.dll.meta └── PropertyChanged ├── PropertyChanged.Fody.dll └── PropertyChanged.Fody.dll.meta /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text 3 | 4 | # Don't check these into the repo as LF to work around TeamCity bug 5 | *.xml -text 6 | *.targets -text 7 | 8 | # Custom for Visual Studio 9 | *.cs diff=csharp 10 | *.sln merge=union 11 | *.csproj merge=union 12 | *.vbproj merge=union 13 | *.fsproj merge=union 14 | *.dbproj merge=union 15 | 16 | # Denote all files that are truly binary and should not be modified. 17 | *.dll binary 18 | *.exe binary 19 | *.png binary 20 | *.ico binary 21 | *.snk binary 22 | *.pdb binary 23 | *.svg binary 24 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /[Ll]ibrary/ 2 | /[Tt]emp/ 3 | /[Oo]bj/ 4 | /[Bb]uild/ 5 | 6 | # Autogenerated VS/MD solution and project files 7 | *.csproj 8 | *.unityproj 9 | *.sln 10 | *.suo 11 | *.tmp 12 | *.user 13 | *.userprefs 14 | *.pidb 15 | *.booproj 16 | 17 | # Unity3D generated meta files 18 | *.pidb.meta 19 | 20 | # Unity3D Generated File On Crash Reports 21 | sysinfo.txt -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2015 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | 23 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # UnityFody 2 | An implementation of fody that runs from unity. 3 | 4 | As fody is written in 4.0+, plugins written for fody will not work by default - they must be modified to work with 3.5. 5 | 6 | ### Plugin branch setup 7 | To ensure that setting up a plugin branch is consistent, the mono cecil dlls in this repository (or 3.5 configuration builds from the mono cecil repository) should be referenced from a root level lib folder in that branch. The PropertyChanged branch has this, if an example is needed. 8 | 9 | ## Unity compatible plugin branches 10 | * [PropertyChanged](https://github.com/jbruening/PropertyChanged/tree/3.5_compat) 11 | 12 | 13 | ## Settings 14 | the FodyWeavers.xml can accept the following attributes in the \ element: 15 | * ProcessAssemblies - comma separate list of file names for which dlls to actually process. Other dlls found in search paths are skipped. By default, this is "Assembly-CSharp.dll,Assembly-CSharp-firstpass.dll" if the attribute is not specified. 16 | -------------------------------------------------------------------------------- /src/Assets/Plugins/Editor/ExampleProjectWeaver/ModuleWeaver.cs: -------------------------------------------------------------------------------- 1 | using UnityEngine; 2 | using System.Collections; 3 | using Mono.Cecil; 4 | 5 | public class ModuleWeaver 6 | { 7 | public ModuleDefinition ModuleDefinition { get; set; } 8 | 9 | public void Execute() 10 | { 11 | //Debug.Log("Executing module weaver for " + ModuleDefinition.Assembly.FullName); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/Assets/Plugins/Editor/ExampleProjectWeaver/ModuleWeaver.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: a49c136698c1d3a4b9dccdcdd4fd7bba 3 | timeCreated: 1433437436 4 | licenseType: Free 5 | MonoImporter: 6 | serializedVersion: 2 7 | defaultReferences: [] 8 | executionOrder: 0 9 | icon: {instanceID: 0} 10 | userData: 11 | assetBundleName: 12 | assetBundleVariant: 13 | -------------------------------------------------------------------------------- /src/Assets/Plugins/Editor/Fody/FodyAssemblyPostProcessor.cs: -------------------------------------------------------------------------------- 1 | using Mono.Cecil; 2 | using Mono.Cecil.Cil; 3 | using System; 4 | using System.IO; 5 | using System.Collections.Generic; 6 | using UnityEditor; 7 | using UnityEngine; 8 | using System.Linq; 9 | using System.Xml.Linq; 10 | using System.Xml; 11 | using Assembly = System.Reflection.Assembly; 12 | using UnityEditor.Callbacks; 13 | using UnityEngine.SceneManagement; 14 | 15 | [InitializeOnLoad] 16 | public static class FodyAssemblyPostProcessor 17 | { 18 | static HashSet DefaultAssemblies = new HashSet() 19 | { 20 | "Assembly-CSharp.dll", 21 | "Assembly-CSharp-firstpass.dll" 22 | }; 23 | 24 | [PostProcessBuildAttribute(1)] 25 | public static void OnPostprocessBuild(BuildTarget target, string pathToBuiltProject) 26 | { 27 | var exeDir = Path.GetDirectoryName(pathToBuiltProject); 28 | var dataFolder = Path.Combine(exeDir, Path.GetFileNameWithoutExtension(pathToBuiltProject) + "_Data"); 29 | if (!Directory.Exists(dataFolder)) 30 | return; 31 | var managed = Path.Combine(dataFolder, "Managed"); 32 | if (!Directory.Exists(managed)) 33 | return; 34 | //Debug.LogFormat("Fody post-weaving {0}", pathToBuiltProject); 35 | var assemblyResolver = new DefaultAssemblyResolver(); 36 | assemblyResolver.AddSearchDirectory(managed); 37 | HashSet assemblyPaths = new HashSet(); 38 | foreach(var file in Directory.GetFiles(managed).Where(d => Path.GetExtension(d) == ".dll")) 39 | { 40 | assemblyPaths.Add(file); 41 | } 42 | ProcessAssembliesIn(assemblyPaths, assemblyResolver); 43 | } 44 | 45 | [PostProcessScene] 46 | public static void PostprocessScene() 47 | { 48 | if (!BuildPipeline.isBuildingPlayer) 49 | return; 50 | 51 | var scene = SceneManager.GetActiveScene(); 52 | if (!scene.IsValid() || scene.buildIndex != 0) 53 | return; 54 | 55 | DoProcessing(); 56 | } 57 | 58 | static FodyAssemblyPostProcessor() 59 | { 60 | DoProcessing(); 61 | } 62 | 63 | static void DoProcessing() 64 | { 65 | try 66 | { 67 | //Debug.Log( "Fody processor running" ); 68 | 69 | // Lock assemblies while they may be altered 70 | EditorApplication.LockReloadAssemblies(); 71 | 72 | var assetPath = Path.GetFullPath(Application.dataPath); 73 | 74 | // This will hold the paths to all the assemblies that will be processed 75 | HashSet assemblyPaths = new HashSet(); 76 | // This will hold the search directories for the resolver 77 | HashSet assemblySearchDirectories = new HashSet(); 78 | 79 | // Add all assemblies in the project to be processed, and add their directory to 80 | // the resolver search directories. 81 | foreach( System.Reflection.Assembly assembly in AppDomain.CurrentDomain.GetAssemblies() ) 82 | { 83 | if (assembly.IsDynamic) 84 | continue; 85 | 86 | try 87 | { 88 | // Only process assemblies which are in the project 89 | if( assembly.Location.Replace( '\\', '/' ).StartsWith( Application.dataPath.Substring( 0, Application.dataPath.Length - 7 ) ) && 90 | !Path.GetFullPath(assembly.Location).StartsWith(assetPath)) //but not in the assets folder 91 | { 92 | assemblyPaths.Add( assembly.Location ); 93 | } 94 | if (!string.IsNullOrWhiteSpace(assembly.Location)) 95 | // But always add the assembly folder to the search directories 96 | assemblySearchDirectories.Add(Path.GetDirectoryName(assembly.Location)); 97 | else 98 | Debug.LogWarning("Assembly " + assembly.FullName + " has an empty path. Skipping"); 99 | 100 | } 101 | catch (Exception e) 102 | { 103 | Debug.LogError($"{assembly.FullName} - {e}"); 104 | } 105 | } 106 | 107 | // Create resolver 108 | var assemblyResolver = new DefaultAssemblyResolver(); 109 | // Add all directories found in the project folder 110 | foreach( String searchDirectory in assemblySearchDirectories ) 111 | { 112 | assemblyResolver.AddSearchDirectory( searchDirectory ); 113 | } 114 | // Add path to the Unity managed dlls 115 | assemblyResolver.AddSearchDirectory( Path.GetDirectoryName( EditorApplication.applicationPath ) + "/Data/Managed" ); 116 | 117 | ProcessAssembliesIn(assemblyPaths, assemblyResolver); 118 | } 119 | catch (Exception e) 120 | { 121 | Debug.LogError(e); 122 | } 123 | finally 124 | { 125 | // Unlock now that we're done 126 | EditorApplication.UnlockReloadAssemblies(); 127 | } 128 | 129 | //Debug.Log("Fody processor finished"); 130 | } 131 | 132 | static void ProcessAssembliesIn(HashSet assemblyPaths, IAssemblyResolver assemblyResolver) 133 | { 134 | // Create reader parameters with resolver 135 | var readerParameters = new ReaderParameters(); 136 | readerParameters.AssemblyResolver = assemblyResolver; 137 | 138 | // Create writer parameters 139 | var writerParameters = new WriterParameters(); 140 | var fodyConfig = GetFodySettings(); 141 | if (fodyConfig != null) 142 | { 143 | var xva = fodyConfig.Root.Attribute("ProcessAssemblies"); 144 | if (xva != null) 145 | { 146 | var xass = new HashSet(xva.Value.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries)); 147 | assemblyPaths.RemoveWhere(a => !xass.Contains(Path.GetFileName(a))); 148 | } 149 | else 150 | { 151 | assemblyPaths.RemoveWhere(a => !DefaultAssemblies.Contains(Path.GetFileName(a))); 152 | } 153 | } 154 | 155 | var weavers = InitializeWeavers(fodyConfig, assemblyResolver); 156 | 157 | // Process any assemblies which need it 158 | foreach (String assemblyPath in assemblyPaths) 159 | { 160 | // mdbs have the naming convention myDll.dll.mdb whereas pdbs have myDll.pdb 161 | String mdbPath = assemblyPath + ".mdb"; 162 | String pdbPath = assemblyPath.Substring(0, assemblyPath.Length - 3) + "pdb"; 163 | 164 | // Figure out if there's an pdb/mdb to go with it 165 | if (File.Exists(pdbPath)) 166 | { 167 | readerParameters.ReadSymbols = true; 168 | readerParameters.SymbolReaderProvider = new Mono.Cecil.Pdb.PdbReaderProvider(); 169 | writerParameters.WriteSymbols = true; 170 | writerParameters.SymbolWriterProvider = new Mono.Cecil.Mdb.MdbWriterProvider(); // pdb written out as mdb, as mono can't work with pdbs 171 | } 172 | else if (File.Exists(mdbPath)) 173 | { 174 | readerParameters.ReadSymbols = true; 175 | readerParameters.SymbolReaderProvider = new Mono.Cecil.Mdb.MdbReaderProvider(); 176 | writerParameters.WriteSymbols = true; 177 | writerParameters.SymbolWriterProvider = new Mono.Cecil.Mdb.MdbWriterProvider(); 178 | } 179 | else 180 | { 181 | readerParameters.ReadSymbols = false; 182 | readerParameters.SymbolReaderProvider = null; 183 | writerParameters.WriteSymbols = false; 184 | writerParameters.SymbolWriterProvider = null; 185 | } 186 | 187 | // Read assembly 188 | var module = ModuleDefinition.ReadModule(assemblyPath, readerParameters); 189 | 190 | PrepareWeaversForModule(weavers, module); 191 | 192 | try 193 | { 194 | // Process it if it hasn't already 195 | //Debug.Log( "Processing " + Path.GetFileName( assemblyPath ) ); 196 | if (ProcessAssembly(assemblyPath, module, weavers)) 197 | { 198 | module.Write(assemblyPath, writerParameters); 199 | //Debug.Log( "Done writing" ); 200 | } 201 | } 202 | catch (Exception e) 203 | { 204 | Debug.LogWarning(e); 205 | } 206 | } 207 | } 208 | 209 | private static bool ProcessAssembly(string assemblyPath, ModuleDefinition module, IEnumerable weavers) 210 | { 211 | if (module.Types.Any(t => t.Name == "ProcessedByFody")) 212 | { 213 | //Debug.LogFormat("skipped {0} as it is already processed", assemblyPath); 214 | return false; 215 | } 216 | 217 | //Debug.Log("Writing to " + assemblyPath); 218 | 219 | foreach (var weaver in weavers) 220 | { 221 | if (weaver.WeaverInstance == null) continue; 222 | 223 | try 224 | { 225 | weaver.Run("Execute"); 226 | } 227 | catch (Exception e) 228 | { 229 | Debug.LogErrorFormat("Failed to run weaver {0} on {1}: {2}", weaver.PrettyName(), assemblyPath, e); 230 | } 231 | } 232 | 233 | AddProcessedFlag(module); 234 | return true; 235 | } 236 | 237 | private static void PrepareWeaversForModule(List weavers, ModuleDefinition module) 238 | { 239 | foreach(var weaver in weavers) 240 | { 241 | weaver.SetProperty("ModuleDefinition", module); 242 | } 243 | } 244 | 245 | static void AddProcessedFlag(ModuleDefinition module) 246 | { 247 | module.Types.Add(new TypeDefinition(null, "ProcessedByFody", TypeAttributes.NotPublic | TypeAttributes.Abstract | TypeAttributes.Interface)); 248 | } 249 | 250 | static XDocument GetFodySettings() 251 | { 252 | var configAsset = AssetDatabase.FindAssets("FodyWeavers t:TextAsset").FirstOrDefault(); 253 | if (!string.IsNullOrEmpty(configAsset)) 254 | { 255 | var configFile = AssetDatabase.GUIDToAssetPath(configAsset); 256 | 257 | //Debug.Log("weavers file located at " + configFile); 258 | 259 | return GetDocument(configFile); 260 | } 261 | //else 262 | // Debug.LogFormat("no file found named FodyWeavers.xml"); 263 | 264 | return null; 265 | } 266 | 267 | static List InitializeWeavers(XDocument fodyConfig, IAssemblyResolver resolver) 268 | { 269 | var weavers = new List(); 270 | 271 | if (fodyConfig != null) 272 | { 273 | foreach (var element in fodyConfig.Root.Elements()) 274 | { 275 | var assemblyName = element.Name.LocalName + ".Fody"; 276 | var existing = weavers.FirstOrDefault(x => string.Equals(x.AssemblyName, assemblyName, StringComparison.OrdinalIgnoreCase)); 277 | var index = weavers.Count; 278 | if (existing != null) 279 | { 280 | index = weavers.IndexOf(existing); 281 | weavers.Remove(existing); 282 | } 283 | var weaverEntry = new WeaverEntry 284 | { 285 | Element = element.ToString(SaveOptions.None), 286 | AssemblyName = assemblyName, 287 | TypeName = "ModuleWeaver" 288 | }; 289 | //Debug.LogFormat("Added weaver {0}", weaverEntry.AssemblyName); 290 | weavers.Insert(index, weaverEntry); 291 | } 292 | 293 | foreach (var weaverConfig in weavers.ToArray()) 294 | { 295 | if (weaverConfig.WeaverType != null) continue; 296 | 297 | //determine the assembly path. 298 | var weavePath = AssetDatabase.FindAssets(weaverConfig.AssemblyName).Select(w => AssetDatabase.GUIDToAssetPath(w)).FirstOrDefault(p => p.EndsWith(".dll")); 299 | if (string.IsNullOrEmpty(weavePath)) 300 | { 301 | //Debug.LogWarningFormat("Could not find weaver named {0}", weaverConfig.AssemblyName); 302 | weavers.Remove(weaverConfig); 303 | continue; 304 | } 305 | weaverConfig.AssemblyPath = weavePath; 306 | 307 | //Debug.Log(string.Format("Weaver '{0}'.", weaverConfig.AssemblyPath)); 308 | var assembly = LoadAssembly(weaverConfig.AssemblyPath); 309 | 310 | var weaverType = GetType(assembly, weaverConfig.TypeName); 311 | if (weaverType == null) 312 | { 313 | weavers.Remove(weaverConfig); 314 | continue; 315 | } 316 | 317 | weaverConfig.Activate(weaverType); 318 | SetProperties(weaverConfig, resolver); 319 | } 320 | } 321 | 322 | //add a project weaver 323 | var projectWeavers = typeof(FodyAssemblyPostProcessor).Assembly.GetTypes().Where(t => t.Name.EndsWith("ModuleWeaver")); 324 | foreach(var weaver in projectWeavers) 325 | { 326 | //Debug.LogFormat("Added project weaver {0}", weaver); 327 | var entry = new WeaverEntry(); 328 | entry.Activate(weaver); 329 | SetProperties(entry,resolver); 330 | weavers.Add(entry); 331 | } 332 | 333 | //Debug.LogFormat("Fody processor running for weavers {0}", string.Join("; ", weavers.Select(w => w.PrettyName()).ToArray())); 334 | 335 | return weavers; 336 | } 337 | 338 | private static Type GetType(Assembly assembly, string typeName) 339 | { 340 | return assembly.GetTypes().FirstOrDefault(t => t.Name == typeName); 341 | } 342 | 343 | static XDocument GetDocument(string configFilePath) 344 | { 345 | try 346 | { 347 | return XDocument.Load(configFilePath); 348 | } 349 | catch (XmlException exception) 350 | { 351 | throw new Exception(string.Format("Could not read '{0}' because it has invalid xml. Message: '{1}'.", "FodyWeavers.xml", exception.Message)); 352 | } 353 | } 354 | 355 | private static void SetProperties(WeaverEntry weaverEntry, IAssemblyResolver resolver) 356 | { 357 | if (weaverEntry.WeaverInstance == null) return; 358 | 359 | if (weaverEntry.Element != null) 360 | { 361 | var weaverElement = XElement.Parse(weaverEntry.Element); 362 | weaverEntry.TrySetProperty("Config", weaverElement); 363 | } 364 | 365 | weaverEntry.TrySetProperty("AssemblyResolver", resolver); 366 | weaverEntry.TryAddEvent("LogDebug", new Action((str) => Debug.Log(str))); 367 | weaverEntry.TryAddEvent("LogInfo", new Action((str) => Debug.Log(str))); 368 | weaverEntry.TryAddEvent("LogWarning", new Action((str) => Debug.LogWarning(str))); 369 | } 370 | 371 | static Dictionary assemblies = new Dictionary(StringComparer.OrdinalIgnoreCase); 372 | 373 | static Assembly LoadAssembly(string assemblyPath) 374 | { 375 | Assembly assembly; 376 | if (assemblies.TryGetValue(assemblyPath, out assembly)) 377 | { 378 | //Debug.Log(string.Format(" Loading '{0}' from cache.", assemblyPath)); 379 | return assembly; 380 | } 381 | //Debug.Log(string.Format(" Loading '{0}' from disk.", assemblyPath)); 382 | return assemblies[assemblyPath] = LoadFromFile(assemblyPath); 383 | } 384 | 385 | static Assembly LoadFromFile(string assemblyPath) 386 | { 387 | var pdbPath = Path.ChangeExtension(assemblyPath, "pdb"); 388 | var rawAssembly = File.ReadAllBytes(assemblyPath); 389 | if (File.Exists(pdbPath)) 390 | { 391 | return Assembly.Load(rawAssembly, File.ReadAllBytes(pdbPath)); 392 | } 393 | var mdbPath = Path.ChangeExtension(assemblyPath, "mdb"); 394 | if (File.Exists(mdbPath)) 395 | { 396 | return Assembly.Load(rawAssembly, File.ReadAllBytes(mdbPath)); 397 | } 398 | return Assembly.Load(rawAssembly); 399 | } 400 | 401 | class WeaverEntry 402 | { 403 | public string AssemblyName; 404 | public string AssemblyPath; 405 | public string Element; 406 | public string TypeName; 407 | public Type WeaverType; 408 | 409 | public object WeaverInstance; 410 | 411 | public string PrettyName() 412 | { 413 | if (WeaverType == null) 414 | return "invalid weaver: " + AssemblyName + "::" + TypeName; 415 | return WeaverType.Assembly.GetName().Name + "::" + WeaverType.FullName; 416 | } 417 | 418 | internal void SetProperty(string property, object value) 419 | { 420 | WeaverType.GetProperty(property).SetValue(WeaverInstance, value, null); 421 | } 422 | 423 | internal void TrySetProperty(string property, object value) 424 | { 425 | var prop = WeaverType.GetProperty(property); 426 | if (prop == null) return; 427 | prop.SetValue(WeaverInstance, value, null); 428 | } 429 | 430 | internal void TryAddEvent(string evt, Delegate value) 431 | { 432 | var ev = WeaverType.GetEvent(evt); 433 | if (ev == null) return; 434 | ev.AddEventHandler(WeaverInstance, value); 435 | } 436 | 437 | internal void Activate(Type weaverType) 438 | { 439 | WeaverType = weaverType; 440 | WeaverInstance = Activator.CreateInstance(weaverType); 441 | } 442 | 443 | internal void Run(string methodName) 444 | { 445 | var method = WeaverType.GetMethod(methodName); 446 | if (method == null) 447 | throw new MethodAccessException("Could not find a public method named " + methodName + " in the type " + WeaverType); 448 | method.Invoke(WeaverInstance, null); 449 | } 450 | } 451 | } 452 | 453 | -------------------------------------------------------------------------------- /src/Assets/Plugins/Editor/Fody/FodyAssemblyPostProcessor.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 1bf4b202c63b4d1468bdcff39c3f10f4 3 | timeCreated: 1433268833 4 | licenseType: Free 5 | MonoImporter: 6 | serializedVersion: 2 7 | defaultReferences: [] 8 | executionOrder: 0 9 | icon: {instanceID: 0} 10 | userData: 11 | assetBundleName: 12 | assetBundleVariant: 13 | -------------------------------------------------------------------------------- /src/Assets/Plugins/Editor/Fody/FodyWeavers.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /src/Assets/Plugins/Editor/Fody/Mono.Cecil.Mdb.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jbruening/UnityFody/b6f1d2b5c1ab294900306790e65d67633b471fb8/src/Assets/Plugins/Editor/Fody/Mono.Cecil.Mdb.dll -------------------------------------------------------------------------------- /src/Assets/Plugins/Editor/Fody/Mono.Cecil.Mdb.dll.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 8816c141e81ca1f4881ec8be11e0284a 3 | timeCreated: 1433369202 4 | licenseType: Free 5 | PluginImporter: 6 | serializedVersion: 1 7 | iconMap: {} 8 | executionOrder: {} 9 | isPreloaded: 0 10 | platformData: 11 | Any: 12 | enabled: 0 13 | settings: {} 14 | Editor: 15 | enabled: 1 16 | settings: 17 | DefaultValueInitialized: true 18 | userData: 19 | assetBundleName: 20 | assetBundleVariant: 21 | -------------------------------------------------------------------------------- /src/Assets/Plugins/Editor/Fody/Mono.Cecil.Pdb.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jbruening/UnityFody/b6f1d2b5c1ab294900306790e65d67633b471fb8/src/Assets/Plugins/Editor/Fody/Mono.Cecil.Pdb.dll -------------------------------------------------------------------------------- /src/Assets/Plugins/Editor/Fody/Mono.Cecil.Pdb.dll.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: b87fe37696c54974ca4797c52742133b 3 | timeCreated: 1433369202 4 | licenseType: Free 5 | PluginImporter: 6 | serializedVersion: 1 7 | iconMap: {} 8 | executionOrder: {} 9 | isPreloaded: 0 10 | platformData: 11 | Any: 12 | enabled: 0 13 | settings: {} 14 | Editor: 15 | enabled: 1 16 | settings: 17 | DefaultValueInitialized: true 18 | userData: 19 | assetBundleName: 20 | assetBundleVariant: 21 | -------------------------------------------------------------------------------- /src/Assets/Plugins/Editor/Fody/Mono.Cecil.Rocks.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jbruening/UnityFody/b6f1d2b5c1ab294900306790e65d67633b471fb8/src/Assets/Plugins/Editor/Fody/Mono.Cecil.Rocks.dll -------------------------------------------------------------------------------- /src/Assets/Plugins/Editor/Fody/Mono.Cecil.Rocks.dll.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 4641b37912e63b4459da5e2a5f2f53e8 3 | timeCreated: 1433369202 4 | licenseType: Free 5 | PluginImporter: 6 | serializedVersion: 1 7 | iconMap: {} 8 | executionOrder: {} 9 | isPreloaded: 0 10 | platformData: 11 | Any: 12 | enabled: 0 13 | settings: {} 14 | Editor: 15 | enabled: 1 16 | settings: 17 | DefaultValueInitialized: true 18 | userData: 19 | assetBundleName: 20 | assetBundleVariant: 21 | -------------------------------------------------------------------------------- /src/Assets/Plugins/Editor/Fody/Mono.Cecil.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jbruening/UnityFody/b6f1d2b5c1ab294900306790e65d67633b471fb8/src/Assets/Plugins/Editor/Fody/Mono.Cecil.dll -------------------------------------------------------------------------------- /src/Assets/Plugins/Editor/Fody/Mono.Cecil.dll.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: e8485052517880145a01f92cfd2d7ffd 3 | timeCreated: 1433369204 4 | licenseType: Free 5 | PluginImporter: 6 | serializedVersion: 1 7 | iconMap: {} 8 | executionOrder: {} 9 | isPreloaded: 0 10 | platformData: 11 | Any: 12 | enabled: 0 13 | settings: {} 14 | Editor: 15 | enabled: 1 16 | settings: 17 | DefaultValueInitialized: true 18 | userData: 19 | assetBundleName: 20 | assetBundleVariant: 21 | -------------------------------------------------------------------------------- /src/Assets/Plugins/Editor/PropertyChanged/PropertyChanged.Fody.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jbruening/UnityFody/b6f1d2b5c1ab294900306790e65d67633b471fb8/src/Assets/Plugins/Editor/PropertyChanged/PropertyChanged.Fody.dll -------------------------------------------------------------------------------- /src/Assets/Plugins/Editor/PropertyChanged/PropertyChanged.Fody.dll.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 18fee0a6347596b41b88f9d33f95ca91 3 | timeCreated: 1435690445 4 | licenseType: Free 5 | PluginImporter: 6 | serializedVersion: 1 7 | iconMap: {} 8 | executionOrder: {} 9 | isPreloaded: 0 10 | platformData: 11 | Any: 12 | enabled: 0 13 | settings: {} 14 | Editor: 15 | enabled: 1 16 | settings: 17 | DefaultValueInitialized: true 18 | userData: 19 | assetBundleName: 20 | assetBundleVariant: 21 | --------------------------------------------------------------------------------