private List <PluginAssemblyInfo> ScanForPluginDLLs() { List <PluginAssemblyInfo> toReturn = new List <PluginAssemblyInfo>(); foreach (string assetAssemblyPath in Directory.GetFiles(Utilities.AssetPath, "*.dll", SearchOption.AllDirectories)) { string assetRelativePath = Utilities.GetAssetsRelativePathFrom(assetAssemblyPath); PluginImporter importer = (PluginImporter)AssetImporter.GetAtPath(assetRelativePath); if (importer == null) { Debug.LogWarning($"Didn't get an importer for '{assetRelativePath}', most likely due to it being in a Unity hidden folder (prefixed by a .)"); continue; } PluginAssemblyInfo toAdd = new PluginAssemblyInfo(this, Guid.Parse(AssetDatabase.AssetPathToGUID(assetRelativePath)), assetAssemblyPath, importer.isNativePlugin ? PluginType.Native : PluginType.Managed); toReturn.Add(toAdd); } foreach (string packageDllPath in Directory.GetFiles(Utilities.PackageLibraryCachePath, "*.dll", SearchOption.AllDirectories)) { string metaPath = packageDllPath + ".meta"; if (!File.Exists(metaPath)) { Debug.LogWarning($"Skipping a packages DLL that didn't have an associated meta: '{packageDllPath}'"); continue; } Guid guid; using (StreamReader reader = new StreamReader(metaPath)) { string guidLine = reader.ReadUntil("guid"); if (!Guid.TryParse(guidLine.Split(':')[1].Trim(), out guid)) { Debug.LogWarning($"Skipping a packages DLL that didn't have a valid guid in the .meta file: '{packageDllPath}'"); continue; } } bool isManaged = Utilities.IsManagedAssembly(packageDllPath); PluginAssemblyInfo toAdd = new PluginAssemblyInfo(this, guid, packageDllPath, isManaged ? PluginType.Managed : PluginType.Native); toReturn.Add(toAdd); } return(toReturn); }
/// <summary> /// Adds a dependency to the project. /// </summary> /// <param name="pluginAssemblyInfo">The plugin dependency.</param> internal void AddDependency(PluginAssemblyInfo pluginAssemblyInfo) { AddDependency(pluginAssemblyDependencies, pluginAssemblyInfo); }