Подтвердить что ты не робот

Используя Visual Studio для копирования файлов?

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

Любые идеи, как это сделать в VSTS?

BTW: Я слышал, что использование файла proj может выполнять такие задачи, но я не нашел ничего хорошего для изучения образцов для новичков.: -)

спасибо заранее, Джордж

4b9b3361

Ответ 1

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

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

    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.

Ответ 2

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

Ответ 3

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

Ответ 4

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

Ответ 5

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

Если вы хотите, чтобы проект VisualStudio выполнял только копию, вы можете сделать это с помощью VisualStudio с проектом Makefile.

Проект с неправильным названием Makefile может делать все, что вы можете сделать из командной строки. Очевидно, это означает, что вы можете создать проект Makefile, который копирует только файлы. В проекте Makefile Properties → Configuration Properties → Раздел NMake - это поля для действий Build, Rebuild и Clean. Они могут быть заполнены обычными командами командного файла. При каждой сборке VisualStudio создаст временный командный файл из соответствующего поля и выполнит его с помощью cmd. Предупреждение вы получите 32-разрядный cmd-интерпретатор на 64-битных машинах, поэтому вам понадобится использовать магический системный каталог, если вы хотите получить доступ к 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
    )
)

(строка "копировать foobar" выше приведет к сбою, что приведет к сбою сборки.)

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

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