Beispiel #1
0
        public virtual void SetConfigProperty(String name, String value)
        {
            CCITracing.TraceCall();
            if (value == null)
            {
                value = String.Empty;
            }

            if (this.ProjectMgr != null)
            {
                foreach (ProjectConfig config in this.ProjectConfigs)
                {
                    config.SetConfigurationProperty(name, value);
                }
                this.ProjectMgr.SetProjectFileDirty(true);
            }
        }
        public void SetConfigProperty(string property, string value)
        {
            CCITracing.TraceCall();
            if (value == null)
            {
                value = String.Empty;
            }

            if (this.project != null)
            {
                for (int i = 0, n = this.projectConfigs.Length; i < n; i++)
                {
                    ProjectConfig config = projectConfigs[i];

                    config.SetConfigurationProperty(property, value);
                }

                this.project.SetProjectFileDirty(true);
            }
        }
Beispiel #3
0
        public void SetConfigProperty(string name, string value)
        {
            CCITracing.TraceCall();
            if (value == null)
            {
                value = String.Empty;
            }

            if (this.ProjectMgr != null)
            {
                for (int i = 0, n = this.ProjectConfigs.Count; i < n; i++)
                {
                    ProjectConfig config = ProjectConfigs[i];

                    config.SetConfigurationProperty(name, value);
                }

                this.ProjectMgr.SetProjectFileDirty(true);
            }
        }
Beispiel #4
0
        // =========================================================================================
        // Methods
        // =========================================================================================

        /// <summary>
        /// Sets the node property.
        /// </summary>
        /// <param name="propid">Property id.</param>
        /// <param name="value">Property value.</param>
        /// <returns>Returns success or failure code.</returns>
        public override int SetProperty(int propid, object value)
        {
            int         result;
            __VSHPROPID id = (__VSHPROPID)propid;

            switch (id)
            {
            case __VSHPROPID.VSHPROPID_IsNonMemberItem:
                if (value == null)
                {
                    throw new ArgumentNullException("value");
                }

                bool boolValue;
                CCITracing.TraceCall(this.ID + "," + id.ToString());
                if (Boolean.TryParse(value.ToString(), out boolValue))
                {
                    this.isNonMemberItem = boolValue;

                    // Reset exclude from scc
                    this.ExcludeNodeFromScc = this.IsNonMemberItem;
                }
                else
                {
                    XHelperMethods.TraceFail("Could not parse the IsNonMemberItem property value.");
                }

                result = VSConstants.S_OK;
                break;

            default:
                result = base.SetProperty(propid, value);
                break;
            }

            return(result);
        }
Beispiel #5
0
        protected virtual IVsTextLines GetTextLines()
        {
            CCITracing.TraceCall();
            FileDocumentManager manager = this.GetDocumentManager() as FileDocumentManager;

            Debug.Assert(manager != null, "Could not get the FileDocumentManager");
            Guid           logicalView = Guid.Empty;
            IVsWindowFrame windowFrame = null;
            object         docData;
            VsTextBuffer   lBuffer;
            IVsTextLines   lLines;

            manager.Open(false, false, logicalView, out windowFrame, WindowFrameShowAction.DontShow);
            Debug.Assert(windowFrame != null, "Could not get the IVsWindowFrame");

            windowFrame.GetProperty((int)__VSFPROPID.VSFPROPID_DocData, out docData);

            // Get the VsTextBuffer
            lBuffer = docData as VsTextBuffer;
            if (lBuffer == null)
            {
                IVsTextBufferProvider lBufferProvider = docData as IVsTextBufferProvider;
                if (lBufferProvider != null)
                {
                    NativeMethods.ThrowOnFailure(lBufferProvider.GetTextBuffer(out lLines));
                }
                else
                {
                    throw new Exception("Could get TextLines object.");
                }
            }
            else
            {
                lLines = lBuffer as IVsTextLines;
            }
            return(lLines);
        }
        public override int DebugLaunch(uint grfLaunch)
        {
            CCITracing.TraceCall();

            try
            {
                VsDebugTargetInfo info = new VsDebugTargetInfo();
                info.cbSize = (uint)Marshal.SizeOf(info);
                info.dlo    = Microsoft.VisualStudio.Shell.Interop.DEBUG_LAUNCH_OPERATION.DLO_CreateProcess;

                // On first call, reset the cache, following calls will use the cached values
                string property = GetConfigurationProperty("DebuggerCommand", true);
                if (string.IsNullOrEmpty(property))
                {
                    property = this._project.GetOutputAssembly(this.ConfigCanonicalName);
                }
                info.bstrExe = property;

                property = GetConfigurationProperty("DebuggerWorkingDirectory", false);
                if (string.IsNullOrEmpty(property))
                {
                    property = Path.GetDirectoryName(info.bstrExe);
                }
                info.bstrCurDir = property;

                property = GetConfigurationProperty("DebuggerCommandArguments", false);
                if (!string.IsNullOrEmpty(property))
                {
                    info.bstrArg = property;
                }

                property = GetConfigurationProperty("RemoteDebugMachine", false);
                if (property != null && property.Length > 0)
                {
                    info.bstrRemoteMachine = property;
                }

                property = GetConfigurationProperty("RedirectToOutputWindow", false);
                if (property != null && string.Compare(property, "true", StringComparison.OrdinalIgnoreCase) == 0)
                {
                    info.fSendStdoutToOutputWindow = 1;
                }
                else
                {
                    info.fSendStdoutToOutputWindow = 0;
                }


                property = GetConfigurationProperty("EnableUnmanagedDebugging", false);
                if (property != null && string.Compare(property, "true", StringComparison.OrdinalIgnoreCase) == 0)
                {
                    info.clsidCustom = VSConstants.DebugEnginesGuids.ManagedAndNative_guid; // {92EF0900-2251-11D2-B72E-0000F87572EF}
                }
                else
                {
                    info.clsidCustom = VSConstants.DebugEnginesGuids.ManagedOnly_guid;      // {449EC4CC-30D2-4032-9256-EE18EB41B62B}
                }
                info.grfLaunch = grfLaunch;
                VsShellUtilities.LaunchDebugger(this._project.Site, info);
            }
            catch (Exception e)
            {
                XSharpProjectPackage.Instance.DisplayException(e);

                return(Marshal.GetHRForException(e));
            }

            return(VSConstants.S_OK);
        }
Beispiel #7
0
 public virtual void SetSite(Microsoft.VisualStudio.OLE.Interop.IServiceProvider site)
 {
     CCITracing.TraceCall();
     this.site = new ServiceProvider(site);
 }
Beispiel #8
0
 public virtual void Close()
 {
     CCITracing.TraceCall();
     this.site.Dispose();
     this.site = null;
 }
Beispiel #9
0
 public virtual void CanCreateProject(string filename, uint flags, out int canCreate)
 {
     CCITracing.TraceCall();
     canCreate = 1;
 }
Beispiel #10
0
 /// <summary>
 /// Get's called to tell the env that a file was renamed
 /// </summary>
 ///
 public void AfterRenameFile(string strOldName, string strNewName)
 {
     CCITracing.TraceCall();
     this.getTPD().OnAfterRenameFile(this.theProject, strOldName, strNewName, VSRENAMEFILEFLAGS.VSRENAMEFILEFLAGS_NoFlags);
 }
        public override int DebugLaunch(uint grfLaunch)
        {
            CCITracing.TraceCall();

            try
            {
                if (grfLaunch == 0)
                {
                    grfLaunch = (uint)__VSDBGLAUNCHFLAGS.DBGLAUNCH_Silent;
                }
                VsDebugTargetInfo info = new VsDebugTargetInfo();
                info.cbSize = (uint)Marshal.SizeOf(info);
                info.dlo    = DEBUG_LAUNCH_OPERATION.DLO_CreateProcess;

                // On first call, reset the cache, following calls will use the cached values

                string property = GetConfigurationProperty(XSharpProjectFileConstants.DebuggerCommand, true);
                if (string.IsNullOrEmpty(property))
                {
                    property = this._project.GetOutputAssembly(this.ConfigCanonicalName);
                }
                info.bstrExe = property;

                property = GetConfigurationProperty(XSharpProjectFileConstants.DebuggerWorkingDirectory, false);
                if (string.IsNullOrEmpty(property))
                {
                    property = Path.GetDirectoryName(info.bstrExe);
                }
                if (!Path.IsPathRooted(property))
                {
                    property = Path.Combine(this.ProjectMgr.ProjectFolder, property);
                }
                info.bstrCurDir = property;

                property = GetConfigurationProperty(XSharpProjectFileConstants.DebuggerCommandArguments, false);
                if (!string.IsNullOrEmpty(property))
                {
                    info.bstrArg = property;
                }

                property = GetConfigurationProperty("RemoteDebugMachine", false);
                if (property != null && property.Length > 0)
                {
                    info.bstrRemoteMachine = property;
                }

                property = GetConfigurationProperty("RedirectToOutputWindow", false);
                if (property != null && string.Compare(property, "true", StringComparison.OrdinalIgnoreCase) == 0)
                {
                    info.fSendStdoutToOutputWindow = 1;
                }
                else
                {
                    info.fSendStdoutToOutputWindow = 0;
                }


                property = GetConfigurationProperty(XSharpProjectFileConstants.EnableUnmanagedDebugging, false);
                if (property != null && string.Compare(property, "true", StringComparison.OrdinalIgnoreCase) == 0)
                {
                    info.clsidCustom = VSConstants.DebugEnginesGuids.ManagedAndNative_guid; // {92EF0900-2251-11D2-B72E-0000F87572EF}
                }
                else
                {
                    info.clsidCustom = VSConstants.DebugEnginesGuids.ManagedOnly_guid;      // {449EC4CC-30D2-4032-9256-EE18EB41B62B}
                }
                if (!string.IsNullOrEmpty(this.ProjectMgr.BuildProject.Xml.Sdk))
                {
                    // Sdk style project
                    info.clsidCustom = VSConstants.DebugEnginesGuids.CoreSystemClr_guid;
                }

                info.grfLaunch = grfLaunch;
                VsShellUtilities.LaunchDebugger(this._project.Site, info);
            }
            catch (Exception e)
            {
                XSettings.LogException(e, "DebugLaunch");

                return(Marshal.GetHRForException(e));
            }

            return(VSConstants.S_OK);
        }
Beispiel #12
0
        /// <summary>
        /// Called by the vs shell to start debugging (managed or unmanaged).
        /// Override this method to support other debug engines.
        /// </summary>
        /// <param name="grfLaunch">A flag that determines the conditions under which to start the debugger. For valid grfLaunch values, see __VSDBGLAUNCHFLAGS</param>
        /// <returns>If the method succeeds, it returns S_OK. If it fails, it returns an error code</returns>
        public override int DebugLaunch(uint grfLaunch)
        {
            CCITracing.TraceCall();

            try
            {
                VsDebugTargetInfo info = new VsDebugTargetInfo();
                info.cbSize = (uint)Marshal.SizeOf(info);
                info.dlo    = Microsoft.VisualStudio.Shell.Interop.DEBUG_LAUNCH_OPERATION.DLO_CreateProcess;

                // On first call, reset the cache, following calls will use the cached values
                string property = GetConfigurationProperty("StartProgram", true);

                if (string.IsNullOrEmpty(property))
                {
                    info.bstrExe = ProjectMgr.GetOutputAssembly(this.ConfigName);
                }
                else
                {
                    info.bstrExe = property;
                }

                property = GetConfigurationProperty("WorkingDirectory", false);

                if (string.IsNullOrEmpty(property))
                {
                    info.bstrCurDir = Path.GetDirectoryName(info.bstrExe);
                }
                else
                {
                    if (Path.IsPathRooted(property))
                    {
                        info.bstrCurDir = property;
                    }
                    else
                    {
                        var path = Path.Combine(ProjectMgr.BaseURI.AbsoluteUrl, property);

                        if (Directory.Exists(path))
                        {
                            info.bstrCurDir = path;
                        }
                        else
                        {
                            info.bstrCurDir = property;
                        }
                    }
                }

                property = GetConfigurationProperty("CmdArgs", false);

                if (!string.IsNullOrEmpty(property))
                {
                    info.bstrArg = property;
                }

                property = GetConfigurationProperty("RemoteDebugMachine", false);

                if (property != null && property.Length > 0)
                {
                    info.bstrRemoteMachine = property;
                }

                info.fSendStdoutToOutputWindow = 0;

                property = GetConfigurationProperty("EnableUnmanagedDebugging", false);

                if (property != null && string.Compare(property, "true", StringComparison.OrdinalIgnoreCase) == 0)
                {
                    //Set the unmanged debugger
                    //TODO change to vsconstant when it is available in VsConstants (guidNativeOnlyEng was the old name, maybe it has got a new name)
                    info.clsidCustom = new Guid("{3B476D35-A401-11D2-AAD4-00C04F990171}");
                }
                else
                {
                    //Set the managed debugger
                    info.clsidCustom = VSConstants.CLSID_ComPlusOnlyDebugEngine;
                }

                info.grfLaunch = grfLaunch;
                LaunchDebugger(this.ProjectMgr.Site, info);
            }
            catch (Exception e)
            {
                var proj = ((NemerleProjectNode)ProjectMgr).ProjectInfo;
                proj.ShowMessage(e.Message, Nemerle.Completion2.MessageType.Error);

                return(Marshal.GetHRForException(e));
            }

            return(VSConstants.S_OK);
        }
Beispiel #13
0
 public virtual void Terminate()
 {
     CCITracing.Trace(this.GetType().FullName + ": terminated.");
 }
Beispiel #14
0
        // =========================================================================================
        // Methods
        // =========================================================================================

        /// <summary>
        /// Hides all of the tabs in the Add Reference dialog except for the browse tab, which will search for wixlibs.
        /// </summary>
        /// <returns></returns>
        public override int AddProjectReference()
        {
            CCITracing.TraceCall();

            Guid   emptyGuid           = Guid.Empty;
            Guid   showOnlyThisTabGuid = Guid.Empty;
            Guid   startOnThisTabGuid  = VSConstants.GUID_BrowseFilePage;
            string helpTopic           = "VS.AddReference";
            string machineName         = String.Empty;
            string browseFilters       = this.AddReferenceDialogFilter;
            string browseLocation      = this.AddReferenceDialogInitialDirectory;

            // initialize the structure that we have to pass into the dialog call
            VSCOMPONENTSELECTORTABINIT[] tabInitializers = new VSCOMPONENTSELECTORTABINIT[2];

            // tab 1 is the Project References tab: passing VSHPROPID_ShowProjInSolutionPage will tell the Add Reference
            // dialog to call into our GetProperty to determine if we should show ourself in the dialog
            tabInitializers[0].dwSize         = (uint)Marshal.SizeOf(typeof(VSCOMPONENTSELECTORTABINIT));
            tabInitializers[0].guidTab        = VSConstants.GUID_SolutionPage;
            tabInitializers[0].varTabInitInfo = (int)__VSHPROPID.VSHPROPID_ShowProjInSolutionPage;

            // tab 2 is the Browse tab
            tabInitializers[1].dwSize         = (uint)Marshal.SizeOf(typeof(VSCOMPONENTSELECTORTABINIT));
            tabInitializers[1].guidTab        = VSConstants.GUID_BrowseFilePage;
            tabInitializers[1].varTabInitInfo = 0;

            // initialize the flags to control the dialog
            __VSCOMPSELFLAGS flags = __VSCOMPSELFLAGS.VSCOMSEL_HideCOMClassicTab |
                                     __VSCOMPSELFLAGS.VSCOMSEL_HideCOMPlusTab |
                                     __VSCOMPSELFLAGS.VSCOMSEL_IgnoreMachineName |
                                     __VSCOMPSELFLAGS.VSCOMSEL_MultiSelectMode;

            // get the dialog service from the environment
            IVsComponentSelectorDlg dialog = WixHelperMethods.GetService <IVsComponentSelectorDlg, SVsComponentSelectorDlg>(this.Site);

            try
            {
                // tell ourself not to show our project in the Add Reference dialog
                this.ShowProjectInSolutionPage = false;

                // show the dialog
                ErrorHandler.ThrowOnFailure(dialog.ComponentSelectorDlg(
                                                (uint)flags,
                                                (IVsComponentUser)this,
                                                this.AddReferenceDialogTitle,
                                                helpTopic,
                                                ref showOnlyThisTabGuid,
                                                ref startOnThisTabGuid,
                                                machineName,
                                                (uint)tabInitializers.Length,
                                                tabInitializers,
                                                browseFilters,
                                                ref browseLocation));
            }
            catch (COMException e)
            {
                CCITracing.Trace(e);
                return(e.ErrorCode);
            }
            finally
            {
                // we can show ourself in the Add Reference dialog if somebody else invokes it
                this.ShowProjectInSolutionPage = true;
            }

            return(VSConstants.S_OK);
        }
Beispiel #15
0
 public Package()
 {
     CCITracing.AddTraceLog("c:\\ccitrace.log");
 }
        /// <summary>
        /// Deploys the M-Files Application to a client and launches it.
        /// </summary>
        /// <param name="grfLaunch">Launch flags</param>
        /// <returns>Success code</returns>
        public override int DebugLaunch(uint grfLaunch)
        {
            // TODO: For debugging, check the grfLaunch flags.
            // The flags differ for "Launch" and "Launch with debugging".
            CCITracing.TraceCall();

            // Resolve the test vault.
            var clientApp = new MFilesAPI.MFilesClientApplication();
            var vaultName = GetConfigurationProperty("TestVault", true);

            MFilesAPI.VaultConnection vaultConnection;

            try
            {
                // Try to get the connection.
                vaultConnection = clientApp.GetVaultConnection(vaultName);
            }
            catch
            {
                // Vault wasn't found, ask the user for a new one.
                var selectVaultDialog = new SelectVaultDialog();
                selectVaultDialog.ShowDialog();
                if (selectVaultDialog.Result == System.Windows.Forms.DialogResult.Cancel)
                {
                    return(VSConstants.S_FALSE);
                }

                // Get the user answer.
                vaultName       = selectVaultDialog.VaultName;
                vaultConnection = clientApp.GetVaultConnection(selectVaultDialog.VaultName);

                // If the user defined this as the default vault, save it in the project file.
                if (selectVaultDialog.SetDefault)
                {
                    this.SetConfigurationProperty("TestVault", selectVaultDialog.VaultName);
                }
            }

            // Get the M-Files install directory from the registry.
            var apiVersion = clientApp.GetAPIVersion().Display;
            var hklm64     = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64);
            var mfKey      = hklm64.OpenSubKey(@"Software\Motive\M-Files\" + apiVersion);
            var installDir = (string)mfKey.GetValue("InstallDir");

            mfKey.Close();
            hklm64.Close();

            // Log out to free the current application.
            MFilesAPI.Vault vault = null;
            try
            {
                vault = clientApp.BindToVault(vaultName, IntPtr.Zero, false, true);
                if (vault != null)
                {
                    vault.LogOutWithDialogs(IntPtr.Zero);
                }
            }
            catch
            {
                // We most likely weren't logged in so everything is okay.
            }

            // Deploy the application.
            string vaultGuid    = vaultConnection.GetGUID();
            var    relativePath = string.Format(@"Client\Apps\{0}\sysapps\{1}",
                                                vaultGuid, this.project.GetProjectProperty("Name") ?? "unnamed");
            var targetDir = Path.Combine(installDir, relativePath);

            // If the directory exists, remove it so there's no residue files left.
            if (Directory.Exists(targetDir))
            {
                Directory.Delete(targetDir, true);
            }
            Directory.CreateDirectory(targetDir);

            // Extract the Zip contents to the target directory.
            DeployPackage(targetDir);

            // Log back into the application.
            vault = clientApp.BindToVault(vaultName, IntPtr.Zero, true, true);

            // If vault is null, the user cancelled the login -> Exit
            if (vault == null)
            {
                return(VSConstants.S_FALSE);
            }

            // Figure out the launch mode.
            var launchMode = (GetConfigurationProperty("LaunchMode", false) ?? "").ToLowerInvariant();

            if (launchMode == "powershell")
            {
                // Create a powershell window to launch the application.

                // Create the initial state with the app and vault references.
                var builtInState = InitialSessionState.CreateDefault();
                builtInState.Variables.Add(new SessionStateVariableEntry(
                                               "app", clientApp, "M-Files Application"));
                builtInState.Variables.Add(new SessionStateVariableEntry(
                                               "vault", vault, "M-Files Vault"));
                Runspace runspace = RunspaceFactory.CreateRunspace(builtInState);

                // Run the script.
                runspace.Open();
                Pipeline pipeline = runspace.CreatePipeline();
                pipeline.Commands.AddScript(GetConfigurationProperty("LaunchPSScript", false) ?? "");
                pipeline.Invoke();
                runspace.Close();
            }
            else
            {
                // Launch the application by navigating to a path in the vault.
                var mfilesPath =
                    clientApp.GetDriveLetter() + ":\\" +
                    vaultName + "\\" +
                    GetConfigurationProperty("LaunchMFilesPath", false);

                Process.Start("explorer.exe", string.Format("\"{0}\"", mfilesPath));
            }

            return(VSConstants.S_OK);
        }
Beispiel #17
0
        /// <summary>
        /// Override AddProjectReference to hide the .NET and COM tabs.
        ///
        /// This is copied from the base project - just removed some of
        /// the elements in the tabInitList to remove the .NET and COM
        /// tabs from the dialog.
        /// </summary>
        /// <returns>Success message</returns>
        public override int AddProjectReference()
        {
            CCITracing.TraceCall();

            IVsComponentSelectorDlg4 componentDialog;
            string strBrowseLocations = Path.GetDirectoryName(this.BaseURI.Uri.LocalPath);
            var    tabInitList        = new List <VSCOMPONENTSELECTORTABINIT>()
            {
                new VSCOMPONENTSELECTORTABINIT {
                    // Tell the Add Reference dialog to call hierarchies GetProperty with the following
                    // propID to enablefiltering out ourself from the Project to Project reference
                    varTabInitInfo = (int)__VSHPROPID.VSHPROPID_ShowProjInSolutionPage,
                    guidTab        = VSConstants.GUID_SolutionPage,
                },
                // Add the Browse for file page
                new VSCOMPONENTSELECTORTABINIT {
                    varTabInitInfo = 0,
                    guidTab        = VSConstants.GUID_BrowseFilePage,
                },
            };

            tabInitList.ForEach(tab => tab.dwSize = (uint)Marshal.SizeOf(typeof(VSCOMPONENTSELECTORTABINIT)));

            componentDialog = this.GetService(typeof(IVsComponentSelectorDlg)) as IVsComponentSelectorDlg4;
            try
            {
                // call the container to open the add reference dialog.
                if (componentDialog != null)
                {
                    // Let the project know not to show itself in the Add Project Reference Dialog page
                    this.ShowProjectInSolutionPage = false;
                    // call the container to open the add reference dialog.
                    string browseFilters = "M-Files Application Packages (*.zip)\0*.zip\0";
                    ErrorHandler.ThrowOnFailure(componentDialog.ComponentSelectorDlg5(
                                                    (System.UInt32)(__VSCOMPSELFLAGS.VSCOMSEL_MultiSelectMode | __VSCOMPSELFLAGS.VSCOMSEL_IgnoreMachineName),
                                                    (IVsComponentUser)this,
                                                    0,
                                                    null,
                                                    SR.GetString(SR.AddReferenceDialogTitle, CultureInfo.CurrentUICulture), // Title
                                                    "VS.AddReference",                                                      // Help topic
                                                    0, 0,
                                                    (uint)tabInitList.Count,
                                                    tabInitList.ToArray(),
                                                    ref addComponentLastActiveTab,
                                                    browseFilters,
                                                    ref strBrowseLocations,
                                                    this.TargetFrameworkMoniker.FullName));
                }
            }
            catch (COMException e)
            {
                Trace.WriteLine("Exception : " + e.Message);
                return(e.ErrorCode);
            }
            finally
            {
                // Let the project know it can show itself in the Add Project Reference Dialog page
                this.ShowProjectInSolutionPage = true;
            }
            return(VSConstants.S_OK);
        }