protected override void Dispose(bool disposing) { try { if (!disposing) { return; } if (RegisteredInstances == null) { return; } lock (RegisteredInstances) { var refs = RegisteredInstances.Values .SelectMany(e => e) .ToList(); foreach (var r in refs) { if (r.TryGetTarget(out var t)) { t.Dispose(); } } RegisteredInstances.Clear(); RegisteredInstances = null; } } finally { base.Dispose(disposing); } }
protected override void Dispose(bool disposing) { if (!disposing) { return; } if (RegisteredInstances == null) { return; } lock (RegisteredInstances) { foreach (var o in RegisteredInstances.Values) { foreach (var r in o) { IJavaPeerable t; if (!r.TryGetTarget(out t)) { continue; } t.Dispose(); } } RegisteredInstances.Clear(); } }
protected override void Dispose(bool disposing) { base.Dispose(disposing); if (!disposing) { return; } if (RegisteredInstances == null) { return; } lock (RegisteredInstances) { foreach (var o in RegisteredInstances.Values) { foreach (var r in o) { IJavaPeerable t; if (!r.TryGetTarget(out t)) { continue; } t.Dispose(); } } RegisteredInstances.Clear(); RegisteredInstances = null; } if (bridge != IntPtr.Zero) { NativeMethods.java_interop_gc_bridge_remove_current_app_domain(bridge); bridge = IntPtr.Zero; } }
/// <summary> /// Entry point for the console application. /// </summary> /// <param name="args">Optional parameter is the Name or Uri of a /// registered project collection to connect to.</param> static void Main(string[] args) { List <RegisteredProjectCollection> projectCollections = null; if (args.Count() > 0) { // try the specified argument as the name or Uri of a registered project collection projectCollections = new List <RegisteredProjectCollection>(); projectCollections.Add(RegisteredInstances.GetProjectCollection(args[1])); } else { // get all registered project collections (previously connected to from Team Explorer) projectCollections = new List <RegisteredProjectCollection>( (IEnumerable <RegisteredProjectCollection>)(RegisteredInstances.GetProjectCollections())); } // filter down to only those collections that are currently on-line var onlineCollections = from collection in projectCollections where collection.Offline == false select collection; // fail if there are no registered collections that are currently on-line if (onlineCollections.Count() < 1) { Console.Error.WriteLine("Error: There are no on-line registered project collections"); Environment.Exit(1); } // find a project collection with at least one team project foreach (var projectCollection in onlineCollections) { using (TeamFoundationServer tfs = TeamFoundationServerFactory.GetServer(projectCollection)) { Workspace workspace = null; Boolean createdWorkspace = false; String newFolder = String.Empty; try { var versionControl = (VersionControlServer)tfs.GetService(typeof(VersionControlServer)); var teamProjects = new List <TeamProject>( (IEnumerable <TeamProject>)(versionControl.GetAllTeamProjects(false))); // if there are no team projects in this collection, skip it if (teamProjects.Count < 1) { continue; } RegisterEventHandlers(versionControl); // Create a workspace String assemblyName = GetAssemblyName(); String workspaceName = String.Format("{0}-{1}", Environment.MachineName, assemblyName); try { workspace = versionControl.GetWorkspace(workspaceName, versionControl.AuthenticatedUser); } catch (WorkspaceNotFoundException) { workspace = versionControl.CreateWorkspace(workspaceName, versionControl.AuthenticatedUser); createdWorkspace = true; } var serverFolder = String.Format("$/{0}", teamProjects[0].Name); var localFolder = Path.Combine(Path.GetTempPath(), assemblyName); var workingFolder = new WorkingFolder(serverFolder, localFolder); // Create a workspace mapping workspace.CreateMapping(workingFolder); if (!workspace.HasReadPermission) { throw new SecurityException( String.Format("{0} does not have read permission for {1}", versionControl.AuthenticatedUser, serverFolder)); } // Get the files from the repository workspace.Get(); // Create a file newFolder = Path.Combine(workspace.Folders[0].LocalItem, "For Test Purposes"); Directory.CreateDirectory(newFolder); String newFilename = Path.Combine(newFolder, "Safe to Delete.txt"); AddNewFile(workspace, newFilename); ModifyFile(workspace, newFilename); BranchFile(workspace, newFilename); DeleteFolder(workspace, newFolder); } finally { if ((workspace != null) && createdWorkspace) { workspace.Delete(); } if (!String.IsNullOrEmpty(newFolder) && Directory.Exists(newFolder)) { Directory.Delete(newFolder, true); } } break; } } }