Изменение "отладки / рабочего каталога" глобально (не для каждого пользователя) в VS2008

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

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

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

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

мои мысли:

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

однако я не нашел способа сделать ни то, ни другое.

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

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

любая помощь будет оценили... Спасибо заранее.

4 ответов


такого свойства не существует. Есть большие проблемы, это также должно работать после развертывания решения. Тогда рабочий каталог не будет каталогом "решения", его нет на целевой машине.

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

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

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

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


  1. настроить настройки отладки как обычно (установка рабочего каталога, задать параметры и т. д...) но используйте только относительные пути, переменные. Не используйте абсолютные пути, такие как D:\MyProject\libs
  2. сохраните решение, а затем закрыть Visual Studio.
  3. перейдите в каталог проекта и найдите .файлы vcproj.ИМЯ КОМПЬЮТЕРА.ПОЛЬЗОВАТЕЛЬ.
  4. переименовать на .файлы vcproj. (этот файл будет общая конфигурация отладки, вы можете зафиксировать ее в системе управления версиями)
  5. откройте Visual Studio, при необходимости внесите дополнительные дополнения в настройки отладки. (Дополнительная информация будет храниться в PROJECT.файлы vcproj.ИМЯ КОМПЬЮТЕРА.ПОЛЬЗОВАТЕЛЬ.пользовательский файл, который специфичен для вас. Обратите внимание, что .файлы vcproj.ИМЯ КОМПЬЮТЕРА.ПОЛЬЗОВАТЕЛЬ.пользователь переопределит унаследованные конфигурации)

пример проекта.файлы vcproj.пользователя файл ниже

<?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>

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


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