2014-02-16 3 views
1

У меня есть проект C#. После построения, есть 4 файлов для развертывания:Visual Studio: создайте проект C# для настраиваемого каталога

  1. MYPROJ.EXE
  2. MyProj.exe.config
  3. MyProj.pdb
  4. MyProj.XML

эти файлы и MYPROJ-х refer dll находятся в выходном каталоге, bin/Release.

Я хочу, чтобы настроить выходной каталог (развертывание после этой иерархии каталогов):

+bin/Release 
|--MyProj.exe 
|--MyProj.exe.config 
|--MyProj.pdb 
|--MyProj.XML 
|--+lib 
|--|--<MyProj's refer dll> 
|--+plugin 
|--|--<empty directory. before deployment, I'll copy into there manually> 
|--+Help 
|--|--<empty directory. before deployment, I'll copy into there manually> 

(Конечно, есть в MyProj.exe.configprobingPath="lib".)

До сих пор, я не делаю каталоги вручную. Но я хочу сделать это автоматически. Есть ли способ сделать это автоматически через Visual Studio?

И я хочу развернуть MyProj для ClickOnce. Могу ли я развернуть эту иерархию каталогов (с файлами, которые я копирую вручную, внутри plugin/ и Help/) на ClickOnce?

ответ

1

Мое предложение состоит в том, чтобы создать все папки, которые вам нужны в вашем файле решения (так что они будут управляться Visual Studio), а затем установить «Свойства» файлов внутри этой папки и установить Build Action как Content и Copy to Output Directory в Copy if Newer:

enter image description here

Я использую этот трюк все время, чтобы убедиться, что файлы и папки создаются в BIN папке, где я могу использовать их в дальнейшем.

Еще одно преимущество этого заключается в том, что вам не нужно изменять шаги сборки, чтобы обработать эти файлы с помощью ClickOnce - просто перейдите к свойствам проекта -> Опубликовать -> Файлы приложений - и установите Publish Status в "Включить" для файлов, которые вам нужны. Они будут развернуты с вашим приложением.

enter image description here

0

Из Visual Studio вы можете щелкнуть правой кнопкой мыши проект и перейти к свойствам. В свойствах проекта щелкните вкладку «Построить». Здесь можно настроить местоположение вывода. Кроме того, на вкладке «Build Events» вы можете выгружать команды для выполнения подготовительной или пост-сборной работы.

1

Вы можете автоматизировать это, вызвав задачу Copy в MSBuild. Вы делаете это, открыв свой .csproj внутри среды Visual Studio после щелчка правой кнопкой мыши и выбрав «Выгрузить». Затем щелкните правой кнопкой мыши еще раз и отредактируйте файл .csproj, в котором будет отображаться файл .csproj в текстовом/XML-формате.

Затем вставьте что-то вроде следующего и измените его на конкретные требования. Обратите внимание, что Цель AfterBuild.

<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="3.5"> 
    <PropertyGroup> 
     <YourDestinationDirectory>..\SomeDestinationDirectory</YourDestinationDirectory> 
     <YourSourceDirectory>..\SomeSourceDirectory</YourSourceDirectory> 
    </PropertyGroup> 

    <Target Name="AfterBuild"> 
     <CreateItem Include="$(YourSourceDirectory)\**\*.*"> 
      <Output TaskParameter="Include" ItemName="YourFilesToCopy" /> 
     </CreateItem> 

     <Copy SourceFiles="@(YourFilesToCopy)" 
       DestinationFiles="@(YourFilesToCopy->'$(YourDestinationDirectory)\%(RecursiveDir)%(Filename)%(Extension)')" /> 
    </Target> 
</Project> 

Вы можете легко проверить ваши MSBUILD изменений, открывая строку Visual студии командной строки и запустить MSBuild.exe против вашего файла проекта. Сделайте это 1 на 1, чтобы вы могли сразу поймать любые ошибки.

+1

"Messin' с" выходными каталогами по умолчанию является скользким. поэтому да, я СИЛЬНО ПРЕДОТВРАЩАЮТ метод msbuild shiva. или, по крайней мере, «события пост-сборки» для перемещения файлов. когда я вижу выходной каталог в «.. \ .. \ Something», я CRINGE .... – granadaCoder

+0

Когда я вижу, что кто-то меняет $ (OutputDir), мне всегда нравится «Кто вы думаете, что вы ?! TFS? !» – Nicodemeus

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