コード例 #1
0
        public async Task LoadSolutionAsync()
        {
            if (RootFolder is null || sdkManager.ActiveSdk is null)
            {
                return;
            }

            if (TemporarySolutionFolder is null)
            {
                var files = await RootFolder.GetFilesAsync();

                if (files.FirstOrDefault(s => s.FileType == ".sln" || s.FileType.Contains("proj")) is StorageFile originalSolutionFile)
                {
                    StorageFolder solutionsFolder = await GetTemporarySolutionsFolderAsync();

                    TemporarySolutionFolder = await RootFolder.CopyAsync(solutionsFolder, NameCollisionOption.ReplaceExisting, "bin", "obj");
                }
            }

            using (await solutionLoadLock.LockAsync())
            {
                Workspace.CloseSolution();

                if (TemporarySolutionFolder != null)
                {
                    var files = await TemporarySolutionFolder.GetFilesAsync();

                    if (files.FirstOrDefault(s => s.FileType == ".sln") is StorageFile solutionFile)
                    {
                        await Task.Run(() => Workspace.OpenSolutionAsync(solutionFile.Path));
                    }
                    else if (files.FirstOrDefault(s => s.FileType.Contains("proj")) is StorageFile projectFile)
                    {
                        await Task.Run(() => Workspace.OpenProjectAsync(projectFile.Path));
                    }
                }
            }
        }
コード例 #2
0
        private async Task ApplyChangesToTemporaryFolderAsync(IReadOnlyList <StorageLibraryChange> changes)
        {
            if (RootFolder is null || TemporarySolutionFolder is null)
            {
                return;
            }

            foreach (StorageLibraryChange change in changes)
            {
                if (Path.GetFileName(change.Path).StartsWith(".") ||
                    Path.GetFileName(change.PreviousPath).StartsWith("."))
                {
                    continue;
                }

                switch (change.ChangeType)
                {
                case StorageLibraryChangeType.Created:
                case StorageLibraryChangeType.ContentsChanged:
                case StorageLibraryChangeType.MovedIntoLibrary:
                case StorageLibraryChangeType.ContentsReplaced:
                {
                    string relativePath      = StorageExtensions.GetRelativePath(RootFolder.Path, change.Path);
                    string relativeDirectory = Path.GetDirectoryName(relativePath);

                    IStorageItem?destinationItem = relativePath.Contains(Path.DirectorySeparatorChar) ? await TemporarySolutionFolder.TryGetItemAsync(relativeDirectory) : TemporarySolutionFolder;

                    IStorageItem?item = await change.GetStorageItemAsync();

                    if (destinationItem is IStorageFolder destinationFolder)
                    {
                        if (item is IStorageFile file)
                        {
                            await file.CopyAsync(destinationFolder, file.Name, NameCollisionOption.ReplaceExisting);
                        }
                        else if (item is IStorageFolder folder)
                        {
                            await folder.CopyAsync(destinationFolder, NameCollisionOption.ReplaceExisting);
                        }
                    }
                }
                break;

                case StorageLibraryChangeType.Deleted:
                case StorageLibraryChangeType.MovedOutOfLibrary:
                {
                    string       relativePath = StorageExtensions.GetRelativePath(RootFolder.Path, change.Path);
                    IStorageItem?item         = await TemporarySolutionFolder.TryGetItemAsync(relativePath);

                    if (item != null)
                    {
                        await item.DeleteAsync();
                    }
                }
                break;

                case StorageLibraryChangeType.MovedOrRenamed:
                {
                    string relativePath         = StorageExtensions.GetRelativePath(RootFolder.Path, change.Path);
                    string relativeDirectory    = Path.GetDirectoryName(relativePath);
                    string previousRelativePath = StorageExtensions.GetRelativePath(RootFolder.Path, change.PreviousPath);

                    IStorageItem?destinationItem = relativePath.Contains(Path.DirectorySeparatorChar) ? await TemporarySolutionFolder.TryGetItemAsync(relativeDirectory) : TemporarySolutionFolder;

                    IStorageItem?item = await TemporarySolutionFolder.GetItemAsync(previousRelativePath);

                    if (item != null)
                    {
                        if (Path.GetDirectoryName(change.Path).Equals(Path.GetDirectoryName(change.PreviousPath), StringComparison.OrdinalIgnoreCase))
                        {
                            await item.RenameAsync(Path.GetFileName(change.Path));
                        }
                        else
                        {
                            if (destinationItem is IStorageFolder destinationFolder)
                            {
                                if (item is IStorageFile file)
                                {
                                    await file.MoveAsync(destinationFolder, file.Name, NameCollisionOption.ReplaceExisting);
                                }
                                else if (item is IStorageFolder folder)
                                {
                                    await folder.MoveAsync(destinationFolder, NameCollisionOption.ReplaceExisting);
                                }
                            }
                        }
                    }
                }
                break;
                }
            }
        }