public static T LoadAssetAtPath <T>(string path) where T : ScriptableObject { #if UNITY_EDITOR return((T)AssetDatabase.LoadAssetAtPath(path, typeof(T))); #else string _resourcePath = "Assets/Resources/"; string _pathInResources = IOExtensions.MakeRelativePath(_fromPath: Path.GetFullPath(_resourcePath), _toPath: Path.GetFullPath(path)); // remove file extension _pathInResources = Path.ChangeExtension(_pathInResources, null); return(Resources.Load <T>(_pathInResources)); #endif }
public override bool Execute() { _resultFolders.Clear(); try { Log.LogMessage(MessageImportance.Normal, "Searching Nuget package folder..."); if (string.IsNullOrEmpty(PackageID)) { throw new InvalidDataException("Nuget PackageID is not set"); } var targetFolders = (TargetFolders ?? Enumerable.Empty <ITaskItem>()).Select(f => f.ItemSpec).ToList(); if (!targetFolders.Any()) { targetFolders.Add(Environment.CurrentDirectory); targetFolders.Add(Environment.CurrentDirectory + "\\..\\"); } var packageFolders = NugetExtensions.FindPackageLattestVersionFolders(PackageID, targetFolders.ToArray()); if (!packageFolders.Any()) { Log.LogMessage(MessageImportance.Normal, " * There is no packages found"); return(true); } foreach (var packageFolder in packageFolders) { var path = Path.GetFullPath(packageFolder.Path); if (!string.IsNullOrEmpty(RelativeToPath)) { path = IOExtensions.MakeRelativePath(RelativeToPath, path); } Log.LogMessage(MessageImportance.Normal, " * Found package: {0}", path); _resultFolders.Add(new TaskItem(path)); } } catch (Exception e) { Log.LogError(e.ToString()); return(false); } return(true); }
public override bool Execute() { Log.LogMessage(MessageImportance.Normal, "Analyzing project files for NSwag clients..."); _nswagClients.Clear(); _cachedItems.Clear(); var projectDir = Path.GetDirectoryName(BuildEngine.ProjectFileOfTaskNode) ?? string.Empty; projectDir = projectDir.TrimEnd('\\') + "\\"; var dynamicIncludeTarget = XDocumentExtensions.CreateDynamicIncludeTarget(); using (var cache = new CacheManager(IntermediateOutputPath, Log)) { _cachedItems.Add(new TaskItem(cache.GetCachePath())); var compileItemsToAddGenerator = new List <ITaskItem>(); var compileItemsToRemoveGenerator = new List <ITaskItem>(); foreach (var item in Compile) { Log.LogMessage(MessageImportance.Normal, $"Analyzing '{item.ItemSpec}' compiled item"); var clients = cache.GetCached(item); if (clients == null) { clients = GetClients(item); if (clients.Any() && string.IsNullOrEmpty(item.GetMetadata("Generator"))) { compileItemsToAddGenerator.Add(item); } cache.Cache(item, clients); Log.LogMessage(MessageImportance.Normal, " - Source code analyzed. Results cached."); } else { Log.LogMessage(MessageImportance.Normal, " - Results restored from cache"); } if (!clients.Any()) { if (Equals(item.GetMetadata("Generator"), "MSBuild:UpdateSwaggerClients")) { compileItemsToRemoveGenerator.Add(item); } Log.LogMessage(MessageImportance.Normal, " - There is no NSwag declarations. Skipping."); continue; } foreach (var client in clients) { Log.LogMessage(MessageImportance.Normal, $" - Detected: {client.Namespace}.{client.ClassName} NSwag declaration"); var sourceItemSpec = client.SourceItemSpec; var relativeSourceItemSpec = sourceItemSpec.IsAbsolutePath() ? IOExtensions.MakeRelativePath(projectDir, sourceItemSpec) : sourceItemSpec; var generatedFilePathRelative = Path.Combine(Path.GetDirectoryName(relativeSourceItemSpec), string.Join(".", Path.GetFileNameWithoutExtension(relativeSourceItemSpec), client.ClassName, "cs")); var generatedFilePath = Path.Combine(IntermediateOutputPath, generatedFilePathRelative); Log.LogMessage(MessageImportance.Normal, $" - Shadow source code will be stored in '{generatedFilePath}'"); Path.GetDirectoryName(generatedFilePath).EnsureDirectoryExist(); var taskItem = new TaskItem(generatedFilePath); var relativeGeneratedFilePath = generatedFilePath.IsAbsolutePath() ? IOExtensions.MakeRelativePath(projectDir, generatedFilePath) : generatedFilePath; dynamicIncludeTarget.AddCompileItem(sourceItemSpec, relativeGeneratedFilePath); client.Save(taskItem); taskItem.SetMetadata("Source", item.GetMetadata("FullPath")); _nswagClients.Add(taskItem); } } var dynamicIncludeTargetPath = Path.Combine(IntermediateOutputPath, DynamicIncludeTarget); Path.GetDirectoryName(dynamicIncludeTargetPath).EnsureDirectoryExist(); //Disabled for now //dynamicIncludeTarget.Save(dynamicIncludeTargetPath); _cachedItems.Add(new TaskItem(dynamicIncludeTargetPath)); if (compileItemsToAddGenerator.Any() || compileItemsToRemoveGenerator.Any()) { foreach (var item in compileItemsToAddGenerator) { Log.LogWarning($" - Compile item {item.ItemSpec} contains NSwag client declaration " + "but has no <Generator>MSBuild:UpdateSwaggerClients</Generator> attribute declaration"); } foreach (var item in compileItemsToRemoveGenerator) { Log.LogWarning($" - Compile item {item.ItemSpec} does not contain NSwag client declaration " + "but has <Generator>MSBuild:UpdateSwaggerClients</Generator> attribute declaration"); } } } return(true); }