2015-02-17 4 views
2

У меня есть решение VS2010.NET со многими проектами. В одном из проектов есть директория с не исходными кодами. Когда я создаю это решение, мне нужно, чтобы этот каталог был скопирован в каталог вывода сборки решения. То, что я пытаюсь сделать, - это доступ к файлам в этой папке во время выполнения моего решения. Поскольку это приложение будет распространено на несколько компьютеров, мне также необходимо распространить этот набор файлов данных.Как доставить каталог проекта C# в выходной каталог решения

обзор, вот что мой (упрощенно) иерархия решение выглядит

solution 
| 
+----MainProject 
| | 
| +----source.cs 
| 
+----SupportPorject 
    | 
    +----source.cs 
    +----MyFolder 
      | 
      +----DataFile1 
      +----DataFile2 
      +----DataFile3 

Когда я построить решение, я хотел бы иметь следующие

solution 
| 
+----bin 
    | 
    +----Debug 
    | | 
    | +----Solution.exe 
    | +----SupportProject.dll 
    | +----SupportProject.pdb 
    | +----MyFolder 
    |   | 
    |   +----DataFile1 
    |   +----DataFile2 
    |   +----DataFile3 
    | 
    +----Release 
      | 
      +----Solution.exe 
      +----SupportProject.dll 
      +----MyFolder 
       | 
       +----DataFile1 
       +----DataFile2 
       +----DataFile3 
+0

возможно я пропускаю нюанс, но я думаю, что до тех пор, как вы 'MyFolder' установить выписывать, он должен сделать это именно так, как вам описать. Что вы получаете в настоящее время? – paqogomez

+0

Почему вы не делаете команду простого копирования, которая запускается в событии post build? – Beemen

ответ

1

Вы можете захотеть использовать Xcopy в ваших событиях Visual Studio Build Pre/Post в зависимости от последовательности, в которой вам нужны файлы. xcopy SourceFolder $ (SolutionDir) YourFolderNameHere *. * "/ E/H

Как объяснялось в этом посте более here

+0

Насколько я понимаю решение XCOPY, оно должно быть указано в событии pre или post build моего проекта поддержки. Если это так, то я вижу две проблемы: 1. Мне нужно жестко закодировать имя решения в команде XCOPY. Есть ли для этого переменная окружения? 2. Мне нужно жестко закодировать только один из отладочных или выпускных путей вывода в команду XCOPY. Есть ли для этого переменная окружения? –

1

Другое решение - отредактировать ваш .csproj и найти OutputPath теги. Для отладки выхода, он должен выглядеть примерно так:

<OutputPath>bin\Debug\</OutputPath> 

В соответствии с вашими требованиями, установите его:

<OutputPath>..\bin\Debug\</OutputPath> 
0

Visual Studio также имеет возможность копировать файлы в каталог вывода. Просто измените свой контент с «Не копировать» на «Копировать всегда». Вы можете найти параметр в свойствах файла.

+0

Я знаю о опции «копировать всегда» для файлов внутри проекта. Однако мой пример был очень упрощен. Вместо того, чтобы иметь только 3 файла внутри MyFolder, у меня на самом деле есть сотни файлов, распространяемых по нескольким подпапкам (и подпапкам), и их иерархия должна быть сохранена. Когда я нажимаю на мой верхний уровень «MyFolder», у меня нет возможности «всегда копировать», –

0

После намного большего исследования я наткнулся на ответ (частично на основе this answer to a similar question). Решение участвует рука модификации файла SupportProject.cproj со следующим

<ItemGroup> 
    <Content Include="MyFolder\**"> 
     <Link>%(RecursiveDir)%(Filename)%(Extension)</Link> 
     <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> 
    </Content> 
</ItemGroup> 
Смежные вопросы