2013-12-06 7 views
4

Есть ли способ создать решение в одной папке? У меня есть несколько проектов в этом решении, и каждый из них получает конфигурационный файл, который должен находиться в текущем каталоге. Я просто перемещаю файлы сборки каждого проекта в один, и он все еще работает, однако он выглядит настолько неорганизованным и беспорядочным. Я просто хочу знать, что есть другие способы, как это сделать.Как построить все проекты в одной папке?

+0

* Почему * «должен» конфигурационный файл находится в текущем каталоге? Вы «просто перемещаете файлы сборки каждого проекта в один» - что? Один каталог? Один файл сборки? Один файл конфигурации? Под «конфигурационными файлами» вы имеете в виду файлы конфигурации, загруженные во время выполнения? Какова их связь с файлами сборки? Просьба уточнить ваш текст. –

+0

Вы можете настроить выходную папку. Но обычно в одном решении не должно быть слишком много основных приложений (EXE), и каждый из них должен иметь свои собственные конфиги. –

+0

У меня есть 2 консольных приложения (2 файла проекта). Другое консольное приложение изменяет содержимое файла конфигурации, а другое консольное приложение делает это на основе этого файла конфигурации. – user3068522

ответ

6

Вы можете установить выходной каталог в настройках каждого проекта в решении (если речь идет о Visual Studio). Меню: Проект -> Свойства -> Сборка -> Выходной путь. Например, я использую ..\Build\ для создания проектов в каталоге Build корня решения.

1

Для каждого проекта:

  1. Перейти в свойствах проекта, на вкладке "Построить".
  2. Выберите «Все конфигурации», «все платформы», просто в порядке.
  3. В выходной папке напишите «.. \ bin \» (или любой путь, который является однородным для всех из них, а не в текущей директории проекта). Кроме того, для организации DLL-файлов в подпапках вы можете написать «.. \ bin \ Sub-project-directory» в пути вывода. Затем вы должны добавить файл App.config для проекта EXE с помощью зондирования для всех DLL, чтобы их можно было найти и загрузить во время выполнения.
3

Вы можете изменить проекты «Выходной путь», по умолчанию это каталог bin данного проекта.

Щелкните правой кнопкой мыши по каждому проекту, выберите Properties из контекстного меню, затем выберите Build вкладка. На нижнем уровне в Output раздел изменения Output path:. Установите одинаковый путь для каждого проекта.

Я согласен с комментариями по вашему вопросу, вы не должны его менять. Вместо этого вы можете создать post build action (сценарий PS), который скопирует все файлы из каталогов bin проекта в один из указанных вами вами.

Update:

Набор команд этот сценарий, как сообщение сборки (Свойства- проекта> Build Events> Вкладка Post построить командную строку событий):

xcopy "$(TargetDir)*" "$(SolutionDir)Build" /s /i /Y

2

В этой статье MSDN объясняет, как сделать это красивым, сухим способом: https://blogs.msdn.microsoft.com/kirillosenkov/2015/04/04/using-a-common-intermediate-and-output-directory-for-your-solution/

Это позволяет вам указывать эти каталоги только один раз и использовать thos e в нескольких проектах.

Шаги:

  1. Создание единого common.props файл в растворе, который будет указывать и перезаписывать выход и промежуточные пути для проекта в общий каталог (например, «Solution/бен»). Вот пример * .props файл, который я нашел связан в статье:

    <?xml version="1.0" encoding="utf-8"?> 
    <Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
        <PropertyGroup> 
         <SolutionDir>$(MSBuildThisFileDirectory)</SolutionDir> 
         <Configuration Condition="$(Configuration) == ''">Debug</Configuration> 
         <OutputPath>$(SolutionDir)\bin\$(Configuration)\</OutputPath> 
         <OutDir>$(OutputPath)</OutDir> 
         <OutDir>$(OutputPath)</OutDir> 
         <IntermediateOutputPath> 
          $(SolutionDir)\obj\$(Configuration)\$(MSBuildProjectName)\ 
         </IntermediateOutputPath> 
         <UseCommonOutputDirectory>False</UseCommonOutputDirectory> 
         <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects> 
        </PropertyGroup> 
    </Project> 
    
  2. Включите этот файл в каждом *.csproj, что вы хотите установить общие выходные каталоги для, добавив следующую строку (фактический путь может отличаться): <Import Project="..\Common.props" />

+0

Очень хорошее решение! Единственный недостаток - все еще нужно изменить каждый файл .csproj. Но после этого (возможно) будущие изменения намного проще. –

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