использовать Visual Studio для копирования файлов? - PullRequest
12 голосов
/ 04 мая 2009

Я хочу создать проект Visual Studio (я использую VSTS 2008), который просто выполняет копирование файлов, более подробно, я добавлю некоторые файлы в этот проект и файлы этого проекта (включенные в этот проект) в некоторые место назначения при создании проекта.

Есть идеи, как это сделать в VSTS?

Кстати: я слышал, что использование файла proj может выполнять такие задачи, но я не нашел хороших простых для изучения примеров для начинающих. : -)

спасибо заранее, George

Ответы [ 5 ]

13 голосов
/ 04 мая 2009

Вы можете добавить шаг посткомпоновки в Visual Studio:

  • Откройте свойства проекта (это работает в проектах C #, я думаю, что для VB.NET это также относится).
  • Выберите вкладку Build Events
  • Там вы можете добавить команды событий после сборки, например

    copy $(ProjectDir)\bin\* SOME_OTHER_FOLDER\*

$ (ProjectDir) - это макрос, есть еще несколько доступных, они будут показаны при редактировании команды.

Затем, если вы посмотрите на соответствующий файл проекта (XYZ.csproj или XYZ.vbproj), вы увидите группу свойств, добавленную внизу файла, например:

  <PropertyGroup>
      <PostBuildEvent>copy $(ProjectDir)\bin\* SOME_OTHER_FOLDER\*</PostBuildEvent>
  </PropertyGroup>

Вот как вы это сделаете при непосредственном редактировании файла MSBuild. Обратите внимание, что вам не нужно запускать Visual Studio для сборки и копирования ваших файлов, вы можете просто передать файл проекта в msbuild.exe.

4 голосов
/ 04 мая 2009

Как упоминалось ранее, файлы Visual Studio. xx на самом деле являются файлами MSBuild. Таким образом, вы можете делать в них все, что MSBuild позволяет им делать. Я использовал их для настройки процесса сборки. В вашем случае вы ищете Копировать задачу . Вы можете добавить его в цель AfterBuild .

0 голосов
/ 11 октября 2012

Другие ответы на этот вопрос, как правило, предполагают, что вы используете не VisualStudio, а MSBuild напрямую или у вас есть существующий проект, для которого вы можете добавить пользовательский шаг сборки или событие сборки (я обнаружил, что тип события сборки решений подвержен ошибкам, поскольку они не всегда будут копировать файлы, когда они вам понадобятся).

Если вам нужен проект VisualStudio, который только копирует, вы можете сделать это с помощью стандартного VisualStudio с Makefile проектом.

С слегка ошибочным именем Makefile проект может делать все, что вы можете делать из командной строки. Очевидно, это означает, что вы можете создать проект Makefile, который копирует только файлы. В проекте Свойства & rArr; Свойства конфигурации & rArr; NMake в разделе Makefile находятся поля для действий Build, Rebuild и Clean. Они могут быть заполнены простыми старыми командами командного файла. При каждой сборке VisualStudio создает временный командный файл из соответствующего поля и выполняет его с помощью cmd. Предупреждение вы получите 32-битный интерпретатор cmd на 64-битных машинах, поэтому вам потребуется использовать магический каталог sysnative , если вы хотите получить доступ к 64-битному Команды Windows или библиотеки DLL (я не уверен, что это где-то задокументировано, так что это не всегда так - ваши пакетные сценарии должны быть устойчивы к битности изменения cmd.

Пример пакетного кода, требующего 64-разрядных системных файлов, без предварительного знания того, какой cmd или ОС (32-разрядная или 64-разрядная) будет выполнять код:

if /i "%programfiles%"=="%programfiles(x86)%" if /i not "%programfiles%"=="%programw6432%" (
    REM 32 bit cmd on 64-bit computer
    REM Use the 'sysnative' fake directory to get to 64-bit system32 files
) else (
    if /i not "%programfiles%"=="%programfiles(x86)%" if /i "%programfiles%"=="%programw6432%" (
        REM 64 bit cmd on 64-bit computer
        REM Use the 'system32' directory to get to 64-bit system32 files
    ) else (
        echo "Cannot do 64-bit on 32-bit computer"
        copy foobar
    )
)

(приведенная выше строка «copy foobar» приведет к сбою сборки).

Обратите внимание, VisualStudio (и MSBuild) будет всегда запускать проект Makefile - он не проверяет временную метку в выходном файле, а вместо этого переводит это задание в то, что, как ожидается, будет каким-то другим инструментом сборки (nmake). , cmake, make, ant, maven и т. д.). Так как в этом случае есть простая команда копирования, а не какая-то программа, проверяющая, выполнять копирование или нет, копирование происходит при каждой сборке.

VisualStudio всегда выполнение проектов makefile также означает, что каждый раз, когда вы нажимаете F5 для отладки вашего проекта, VisualStudio будет раздражать вас всплывающим диалоговым окном с плохой формулировкой (если у вас нет не говорите, что не) говорю вам, что ваш проект устарел и что вы должны построить его заново. Если вы скажете VisualStudio не отображать диалоговое окно, оно просто выполнит копирование без запроса перед запуском исполняемого файла.

0 голосов
/ 28 октября 2010

В Visual Studio 2010 вы используете Инструменты пользовательской сборки

Например, это правило копирует "faq.txt" в выходной каталог.

<ItemGroup>
  <CustomBuild Include="faq.txt">
    <Message>Copying readme...</Message>
    <Command>copy %(Identity) $(OutDir)%(Identity)</Command>
    <Outputs>$(OutDir)%(Identity)</Outputs>
  </CustomBuild>
</ItemGroup>
0 голосов
/ 04 мая 2009

Файлы проекта C # / VB.NET представляют собой MSBuild сценарии. MSBuild может делать все, что вам нужно ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...