Изменение «отладочного / рабочего каталога» глобально (не для пользователя) в VS2008 - PullRequest
11 голосов
/ 20 июня 2010

У меня есть решение C ++ в VS2008 с несколькими проектами.Это решение содержит файлы, которые необходимы во время выполнения и загружаются в соответствии с путем относительно каталога решения (например, "Testing/data/" + "dataN.bin").

Чтобы это решение работало, янеобходимо установить параметр рабочего каталога в проектах, чтобы он указывал на каталог решения (например, Configuration Properties >> Debugging >> Working Directory = $(SolutionDir)).Это прекрасно работает, когда я отлаживаю на своем собственном ПК.Однако, когда другой пользователь загружает мое решение, его проекты не имеют этого свойства, установленного должным образом.

Я проследил, чтобы этот параметр был сохранен не в файле проекта (PROJECT.vcproj), а в созданном для него пользовательском файле (PROJECT.vcproj.DOMAIN.USER.user).

Я бы хотел, чтобы этот параметр был сохранен для ВСЕХ пользователей, без необходимости устанавливать его вручную снова и снова.

Мои мысли были:

  • Найдите способ сохранить его в файле .vcproj (не для пользователя) или в файле решения.
  • Найдите способ создания " файл по умолчанию для пользователя", из которого будут запускаться все пользовательские настройки (и могут быть изменены по желанию позже).

Однако я не нашел способавыполните одно из следующих действий.

Еще несколько замечаний / ограничений:

  • Мне нужно работать со многими большими файлами в качестве этих ресурсов, поэтому я бы хотел избежать копирования в разные каталоги..
  • Решения должны поддерживать несколько конфигураций сборки (отладка, выпуск и т.).

Любая помощь будет оценена ... спасибо вdvance.

Ответы [ 4 ]

10 голосов
/ 15 марта 2011
  1. Сконфигурируйте ваши параметры отладки как обычно (установите рабочий каталог, установите параметры и т. Д.), Но используйте только относительные пути, переменные. НЕ используйте абсолютные пути, такие как D: \ MyProject \ libs
  2. Сохраните решение и затем закройте Visual Studio .
  3. Перейдите в каталог вашего проекта и найдите PROJECT.vcproj.COMPUTERNAME.USER.user
  4. Переименуйте в PROJECT.vcproj.user (Этот файл будет общей конфигурацией отладки, вы можете передать его в систему контроля версий)
  5. Откройте Visual Studio , внесите дополнительные дополнения в настройки отладки, если необходимо. (Дополнительная информация будет храниться в файле PROJECT.vcproj.COMPUTERNAME.USER.user, который специфичен для вас. Обратите внимание, что PROJECT.vcproj.COMPUTERNAME.USER.user переопределит унаследованную конфигурацию)

Пример файла PROJECT.vcproj.user представлен ниже

<?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioUserFile
    ProjectType="Visual C++"
    Version="9,00"
    ShowAllFiles="false"
    >
    <Configurations>
        <Configuration
            Name="Release|Win32"
            >
            <DebugSettings
                Command="$(ProjectDir)..\Deploy\$(ConfigurationName)\$(TargetFileName)"
                WorkingDirectory="$(ProjectDir)..\Deploy\$(ConfigurationName)\"
                CommandArguments=""
                Attach="false"
                DebuggerType="3"
                Remote="1"
                RemoteMachine="LOCALHOST"
                RemoteCommand=""
                HttpUrl=""
                PDBPath=""
                SQLDebugging=""
                Environment=""
                EnvironmentMerge="true"
                DebuggerFlavor="0"
                MPIRunCommand=""
                MPIRunArguments=""
                MPIRunWorkingDirectory=""
                ApplicationCommand=""
                ApplicationArguments=""
                ShimCommand=""
                MPIAcceptMode=""
                MPIAcceptFilter=""
            />
        </Configuration>
        <Configuration
            Name="Debug|Win32"
            >
            <DebugSettings
                Command="$(ProjectDir)..\Deploy\$(ConfigurationName)\$(TargetFileName)"
                WorkingDirectory="$(ProjectDir)..\Deploy\$(ConfigurationName)\"
                CommandArguments=""
                Attach="false"
                DebuggerType="3"
                Remote="1"
                RemoteMachine="LOCALHOST"
                RemoteCommand=""
                HttpUrl=""
                PDBPath=""
                SQLDebugging=""
                Environment=""
                EnvironmentMerge="true"
                DebuggerFlavor="0"
                MPIRunCommand=""
                MPIRunArguments=""
                MPIRunWorkingDirectory=""
                ApplicationCommand=""
                ApplicationArguments=""
                ShimCommand=""
                MPIAcceptMode=""
                MPIAcceptFilter=""
            />
        </Configuration>
    </Configurations>
</VisualStudioUserFile>
4 голосов
/ 20 июня 2010

Нет такого свойства. Существуют более серьезные проблемы, которые также должны работать после развертывания решения. Тогда рабочий каталог не будет каталогом «решения», на целевом компьютере его нет.

Вы намного лучше работаете, исходя из предположения, что рабочий каталог совпадает с каталогом EXE. Это будет по умолчанию как при отладке, так и на целевой машине. Вы имеете полный контроль над расположением EXE-файла с настройкой компоновщика. И вы можете защитить себя от быстрого запуска вашей программы с другим рабочим каталогом, получив каталог EXE в вашем коде, чтобы вы могли создать абсолютный путь. Используйте GetModuleFileName (), передайте NULL, чтобы получить путь к файлу EXE.

Другое стандартное решение - скопировать любые ресурсы, которые нужны EXE, в папку, относящуюся к выходной папке сборки. Вы делаете это с событием Pre-Build, чтобы командная строка выглядела примерно так:

if not exist "$(OutDir)\Testing" md "$(OutDir)\Testing"
xcopy /d /s "$(SolutionDir)\Testing\*.*" "$(OutDir)\Testing

Обратите внимание, что параметр / d гарантирует, что копирование выполняется только в случае изменения содержимого папки тестирования.

1 голос
/ 20 июня 2010

Вместо настройки «Отладчик / рабочий каталог» можно использовать «Свойства конфигурации / Общие / выходной каталог» или «Свойства конфигурации / компоновщик / Выходной файл». Эти настройки относятся к каждому проекту, а не к пользователю, и если вы оставите рабочий каталог без изменений , то это будет значением по умолчанию для рабочего каталога приложения.

0 голосов
/ 20 июня 2010

Интересно, возможно ли это, так как у пользователя может не быть достаточно прав для доступа и чтения / записи в каталог, я полагаю, VS проверяет, есть ли у пользователя доступ к каталогу, когда вы выбираете его, возможно, поэтомутолько вариант на основе учетной записи.

...