VS Post Build Event - PullRequest
       56

VS Post Build Event

9 голосов
/ 16 декабря 2008

Я хотел бы реализовать событие после сборки, которое выполняет следующие действия

  1. Относительный путь к копии вывода DLL (1 файл, не весь отладочный джаз)
  2. A зарегистрировать выходную DLL в GAC

Как это сделать?

Ответы [ 7 ]

15 голосов
/ 16 декабря 2008

Ты этого хочешь?

copy $(TargetPath) $(TargetDir)..\..\someFolder\myoutput.dll
regasm $(TargetPath) 

(введено в поле для шага после сборки в свойствах проекта)

7 голосов
/ 16 декабря 2008

Введите следующее в «Свойства проекта-> События сборки-> Командная строка событий после сборки:»

xcopy "$(TargetPath)" "target path" /Y && regasm "$(TargetPath)"

или добавить следующий фрагмент в файл проекта (например, csproj)

<PropertyGroup>
    <PostBuildEvent>xcopy "$(TargetPath)" "target path" /Y && regasm "$(TargetPath)"</PostBuildEvent>
</PropertyGroup>

Обратите внимание, что рекомендуется добавлять "" вокруг аргументов команды копирования, чтобы избежать проблем с путями, содержащими пробелы. Также обратите внимание, что несколько команд можно объединить с помощью &&

5 голосов
/ 16 декабря 2008

Вы уверены, что хотите сделать это как часть компиляции? Я бы рекомендовал использовать ссылки на проекты в решениях, а не GAC, если вы можете избежать этого. Копирование файлов - это одно, но регистрация в GAC довольно навязчива, и вы можете рассмотреть другие среды, в которых компилируется ваш код. Такие вещи, как машины других разработчиков, тестовые среды / серверы сборки и т. Д. Если у вас есть сервер сборки на самом деле вы должны использовать что-то вроде NAnt с каким-либо сервером непрерывной интеграции.

2 голосов
/ 15 апреля 2012

У меня была та же проблема, и я изо всех сил пытался заставить ее работать.

В моем случае я хотел сделать иным способом , который копирует dll SDL в мою выходную папку.

copy "$(SolutionDir)SDL\lib\x86\SDL.dll" "$(SolutionDir)$(Configuration)\"

Обратите внимание, что $(Configuration) будет вашей выходной папкой (например, Debug или Release).

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

Надеюсь спасти кого-нибудь еще на 5 минут!

P.S. Я использую Visual Studio 2010

1 голос
/ 18 мая 2011

Для шага 2 в вопросе я предпочитаю следующее:

"C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin\gacutil" /f /i $(TargetPath)

Примечание: для этого требуется, чтобы Windows SDK был установлен на вашем компьютере для разработки.

Дополнительная информация о доступных макросах, таких как $ (TargetPath), в MSDN.

1 голос
/ 16 декабря 2008

вы можете посмотреть на MS Build. Это то, что мы используем здесь на работе.

CodeProject Link & MSDN Ref

0 голосов
/ 18 мая 2012

Наткнулся на связанную проблему. Ответы здесь помогли (спасибо!).

Мой сценарий состоял в отладке MEF-зависимого приложения, мне нужно было иметь связанные DLL в определенном месте. Я столкнулся с проблемой перезаписи предыдущей сборки, поэтому мне пришлось добавить удаление в скрипт.

delete $(SolutionDir)FileService\$(ProjectName).dll
copy $(TargetPath) $(SolutionDir)FileService\$(ProjectName).dll

Надеюсь, это кому-то тоже поможет!

...