nitrous_007 Ответов: 1

Ошибка в Microsoft.visualstudio.vcprojectengine Для в разделе vcdebugsettings


Я пытаюсь автоматизировать процесс настройки параметров удаленной отладки для решения Visual Studio 2015 только с проектами VC++ (Visual C++).
В проекте VSIX я могу получить решение с помощью ENVDTE и попытаться установить настройки remotedebugger с помощью следующих команд. Однако существует ошибка в настройке рабочего каталога remoteDebugger. Это никогда не срабатывает. Все остальные настройки VCDebugSettings работают. Попытка изменить рабочий каталог изменяет только локальный рабочий каталог отладчика. Помогите!!!!
Библиотека DLL Visual Studio, которую я использую, находится по адресу C:\Program файлы (x86)\Microsoft Visual Studio 14.0\Common7\IDE\PublicAssemblies\Microsoft.VisualStudio.VCProjectEngine.dll, которая предназначена для проектов VC++ в Visual Studio 2015.

Сталкивались ли вы с этой проблемой? Я делаю что-то не так или есть обходной путь?

//------------------------------------------------------------------------------
// <copyright file="ToolWindow1Control.xaml.cs" company="Company">
//     Copyright (c) Company.  All rights reserved.
// </copyright>
//------------------------------------------------------------------------------

namespace VSIXProject1
{
    using System.Diagnostics.CodeAnalysis;
    using System.Windows;
    using System.Windows.Controls;
    using Microsoft.VisualStudio.Shell;
    using Microsoft.VisualStudio.VCProjectEngine;
    using EnvDTE;
    using EnvDTE80;

    /// <summary>
    /// Interaction logic for ToolWindow1Control.
    /// </summary>
    public partial class ToolWindow1Control : UserControl
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="ToolWindow1Control"/> class.
        /// </summary>
        public ToolWindow1Control()
        {
            this.InitializeComponent();
        }

        EnvDTE.DTE dte2;
        /// <summary>
        /// Handles click on the button by displaying a message box.
        /// </summary>
        /// <param name="sender">The event sender.</param>
        /// <param name="e">The event args.</param>
        [SuppressMessage("Microsoft.Globalization", "CA1300:SpecifyMessageBoxOptions", Justification = "Sample code")]
        [SuppressMessage("StyleCop.CSharp.NamingRules", "SA1300:ElementMustBeginWithUpperCaseLetter", Justification = "Default event handler naming pattern")]
        private void button1_Click(object sender, RoutedEventArgs e)
        {
            dte2 = Package.GetGlobalService(typeof(DTE)) as DTE;
            SolutionBuild2 sb = (SolutionBuild2)dte2.Solution.SolutionBuild;
            Projects projects2 = dte2.Solution.Projects;
            VCProject vcproject = null;
            if (projects2.Count > 0)
            {
                foreach (Project project in projects2)//just getting first project for simplicity
                {
                    vcproject = project.Object as VCProject;
                    break;
                }
                if (vcproject != null)
                {
                    //changing both configurations.         
                    foreach (VCConfiguration configuration in vcproject.Configurations)
                    {
                        VCDebugSettings debugging = configuration.DebugSettings;//getting debug settings
                        debugging.DebuggerFlavor = eDebuggerTypes.eRemoteDebugger;
                        debugging.Remote = RemoteDebuggerType.DbgRemoteTCPIP;
                        debugging.DebuggerType = TypeOfDebugger.DbgAuto;
                        debugging.Attach = false;
                        debugging.RemoteMachine = "10.10.10.10";
                        debugging.RemoteCommand = @"C:\Program Files\Test.exe";
                        debugging.SQLDebugging = false;
                        debugging.WorkingDirectory = @"C:\Program Files\";    //Bug here! Does not work.
                    }                   
                }
            }
        }
    }
}


Что я уже пробовал:

Попробовал поискать в интернете, но никто об этом не сообщил.

Richard MacCutchan

Вы должны сообщить об этом в корпорацию Майкрософт.

nitrous_007

Будет отчитываться перед Microsoft

1 Ответов

Рейтинг:
6

nitrous_007

Answer from the good folks at Microsoft is below and it works!. There are other property files like debugger_remote_windows.xml in the location ' C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140\1033\'


// WORKAROUND:
 // background: https://msdn.microsoft.com/en-us/library/dn655034.aspx
 // unfortunately, there is no way to enumerage through the various properties for a given rule.
 // need to review the various .xml files like C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140\1033\debugger_remote_windows.xml
 IVCRulePropertyStorage rule = (IVCRulePropertyStorage)vcConfig.Rules.Item("WindowsRemoteDebugger");
 rule.SetPropertyValue("RemoteDebuggerWorkingDirectory", "C:\\SomeWorkingDir\\");