Visual Studio Post Build Event-копирование в относительное расположение каталога

при успешной сборке я хочу скопировать содержимое выходного каталога в другое место под тем же "базу". Эта родительская папка является относительной частью и может изменяться в зависимости от параметров управления версиями.

Я перечислил несколько доступных мне значений макросов ...

$(SolutionDir) = D:GlobalDirVersionAppNameSolution1build

$(ProjectDir) = D:GlobalDirVersionAppNameSolution1VersionProjectA

Я хочу скопировать содержимое выходного Dir в следующую папку:

D:GlobalDirVersionAppNameSolution2ProjectDependency

базовое местоположение "D:GlobalDirVersionAppName" необходимо получить от одного из вышеупомянутых макросов. Однако ни одно из значений макроса list только родительское расположение.

Как извлечь только базовое расположение команды post build copy ?

5 ответов


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

ie. Использовать $(SolutionDir)\..\.. чтобы получить базовый каталог.


список всех макросов, см. здесь:

http://msdn.microsoft.com/en-us/library/c02as0cs.aspx


вот что вы хотите поместить в командную строку события после сборки проекта:

copy /Y "$(TargetDir)$(ProjectName).dll" "$(SolutionDir)lib$(ProjectName).dll"

EDIT: или если ваше целевое имя отличается от имени проекта.

copy /Y "$(TargetDir)$(TargetName).dll" "$(SolutionDir)lib$(TargetName).dll"

вы можете попробовать:

$(SolutionDir)..\..\

Я думаю, что это связано, но у меня была проблема при построении непосредственно с помощью msbuild командная строка (из пакетного файла) vs building изнутри VS.

Используя что-то вроде следующего:

<PostBuildEvent>
  MOVE /Y "$(TargetDir)something.file1" "$(ProjectDir)something.file1"
  start XCOPY /Y /R "$(SolutionDir)SomeConsoleApp\bin$(ConfigurationName)\*" "$(ProjectDir)App_Data\Consoles\SomeConsoleApp\"
</PostBuildEvent>

(Примечание: start XCOPY, а не XCOPY для разрешения проблемы, которая препятствовала копирование)

макрос $(SolutionDir) оценка для ..\ при выполнении msbuild из файла batchfile, что привело к недостаток. В противном случае он работал нормально при построении из Visual Studio. Подтверждено использование /verbosity:diagnostic чтобы увидеть оцененный результат.

через макрос $(ProjectDir)..\ вместо этого, что составляет одно и то же, работал нормально и сохранил полный путь в обоих сценариях сборки.


не имеет ли смысла использовать msbuild напрямую? Если вы делаете это с каждой сборкой, то вы можете добавить задачу msbuild в конце? Если вы просто хотите увидеть, не можете ли вы найти другое значение макроса, которое не отображается в среде IDE Visual Studio, вы можете включить параметры msbuild для диагностики, и это покажет вам все переменные, которые вы можете использовать, а также их текущее значение.

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

потому что я не совсем знаю, на какой уровень вы хотели бы пойти, и насколько сложным вы хотите, чтобы ваша сборка была, это может дать вам некоторое представление. Недавно я делал скрипты сборки, которые даже выполняли SQL-код как часть строить. Если вам нужна дополнительная помощь или даже некоторые примеры сценариев сборки, дайте мне знать, но если это всего лишь небольшой процесс, который вы хотите запустить в конце сборки, возможно, полный сценарий msbuild немного больше убить.

надеюсь, это поможет Рихан!--1-->