2009-05-04 5 views
12

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

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

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

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

+0

Почему вы не могли создать пакетный или командный файл для копирования? –

+0

@JB King, я хочу интегрировать/обернуть все в msbuild. Любые идеи или рекомендуемые образцы? – George2

+0

См. Мой ответ ниже. –

ответ

0

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

+0

Это правда, но вопрос в том, как возникает вопрос в вопросе? – AnthonyWJones

+0

Я знаю MSBuild. Я хочу найти готовый к использованию/образец справки для копирования файла. Любые рекомендации? – George2

+0

Посмотрите этот файл (MSI, но только устанавливает образцы) с образцами MSBuild и документацией по словам для них: http://download.microsoft.com/download/d/4/0/d401e5cd-04c7-4b72-b644- a00ae3fd5681/msbuildqs.msi – Lucero

13

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

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

    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.

+1

Я бы использовал xcopy, который немного более безопасен. – KJAWolf

+1

PostBuildEvent не является «отличным» решением, так как он не проверяет зависимости, то есть если один из файлов будет скопирован, пост-пост не обнаружит его и не будет повторно запущен. – okigan

+2

использовать 'Копировать/Y источник назначения', если вам нужно скопировать файлы, даже если они будут перезаписаны – northben

4

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

+0

Это была моя первая мысль, но он попросил сделать это в VS (TS). –

+1

Да, так? Разве это не делает то, что он хотел? Когда проект построен, файлы в нем копируются в определенное место. Он может играть очень много переменных. –

0

В Visual Studio 2010, можно использовать Custom Build tools

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

<ItemGroup> 
    <CustomBuild Include="faq.txt"> 
    <Message>Copying readme...</Message> 
    <Command>copy %(Identity) $(OutDir)%(Identity)</Command> 
    <Outputs>$(OutDir)%(Identity)</Outputs> 
    </CustomBuild> 
</ItemGroup> 
0

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

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

Немного прозванный Проект Makefile может делать все, что вы можете сделать из командной строки. Очевидно, это означает, что вы можете создать проект Makefile, который копирует только файлы. В Свойства файла сборки проектаConfiguration Properties  NMake раздела являются поля для сборки, перестроения и чистые действия. Они могут быть заполнены обычными командами командного файла. При каждой сборке 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 
    ) 
) 

(thie "copy foobar" line abo ве не получится в результате чего сборка на провал)

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

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

Смежные вопросы