2013-11-25 5 views
7

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

+4

Вы можете искать и заменять все файлы csproj. – theoutlander

+0

Является ли это стандартным решением для моей проблемы? –

+1

Да ... Потому что на самом деле нет интерфейса. Традиция .NET - это просто использовать каталоги 'bin' и' obj'. –

ответ

1

Вы можете использовать общий файл с частичным проектом для хранения обычных вещей.

Переместить все материалы, которые вы хотите изменить одновременно, в автономный .proj-файл, например. common.proj:

<?xml version="1.0" encoding="utf-8"?> 
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <PropertyGroup> 
    <OutputPath>Debug</OutputPath> 
    <Platform>AnyCPU</Platform> 
    </PropertyGroup> 
</Project> 

чем использование MSBuild import заявление на «включить» общую часть в каждом проекте в вашем решении:

<?xml version="1.0" encoding="utf-8"?> 
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <Import Project="common.proj" /> 
</Project> 

MsBuild импорта работать более или менее таким же образом, как C++ включает в себя: перед проект построен, все директивы импорта заменяются содержимым импортированного файла. Теперь вы можете изменить свои общие свойства только в одном файле. common.proj

Есть одна важная вещь, которая стоит упомянуть: VS кэши включают файлы проекта, поэтому вам придется перезагрузить все проекты после внесения изменений в файл common.proj (так что я предлагайте строить из командной строки при активном изменении commom.proj)

Мы используем этот подход для управления параметрами анализа кода (поскольку они должны быть одинаковыми во всех проектах в решении).

+0

Большое спасибо за вашу помощь! –

2

Вы должны определить новые Build Configuration, которые могут быть скопированы из Release или Debug или составным все вручную. После того, как вы сможете настроить для каждого проекта, это опция в отношении этой пользовательской сборки, которую вы только что создали, и вы сделали. Это делается, естественно, только один раз. После того, как вы выберете эту настраиваемую сборку, все свойства, выбранные для каждого отдельного проекта в решении, будут установлены с требуемыми свойствами.

enter image description here

+0

Если я правильно прочитал OP, он не хочет делать это на основе каждого проекта , он хочет настроить все проекты за один раз. –

+0

@ Moo-Juice: да. BUt это способ сделать это. Вы * один раз *, которые делают для каждого отдельного проекта в решении, и после того, как все работает, просто переключение между различными параметрами конфигурации. – Tigran

+1

Tigran - да, это так, но только если вы хотите ограничить себя VS UI. Если вам неинтересно, и если вы понимаете, как VS Projects и MSBuild связаны друг с другом, вам действительно не нужно и весь набор новых вариантов открыт для вас. То, что VS UI дает вам по умолчанию, не всегда является лучшим, и иногда нужно выполнить некоторую настройку. На самом деле это довольно легко. – quetzalcoatl

1
  • Щелкните правой кнопкой мыши на все проекты в решении, один за другим.
  • Нажмите «выгрузить» на каждом
  • затем нажмите кнопку «редактировать XXX.csproj» снова на всех из них

Теперь у вас есть много XMLs открыли в виде текстовых файлов.

Теперь используйте Найти & Заменить (Ctrl + Shift + H, если вы используете ярлыки по умолчанию), и установите:

  • Найти что: OutputPath>bin\Debug</OutputPath
  • заменить: MyBin\Debug
  • Посмотрите в: All open documents

и hit Replace All.

Затем сделайте то же самое с bin\Release и MyBin\Release.

Затем сохраните все XML-файлы, затем щелкните правой кнопкой мыши по каждому проекту и выберите «перезагрузить».

Вы можете сделать то же самое в любом текстовом редакторе или в любой из найденных команд командной строки & заменить утилиту вроде sed. Если вы какой-либо другой, используйте их вместо этого - это избавит вас от повторного выбора/разгрузки всех проектов.

Вы также можете использовать тот факт, что CSPROJs являются только файлами MSBuild, поэтому вы можете создать сценарий MSBuild с конфигурацией, который будет включен в каждый из ваших проектов C#, и который будет определять дополнительные переменные, такие как «общий путь вывода» и т. Д. Но, хотя это, безусловно, работает (я сделал это несколько раз), он, скорее всего, испортит некоторые PropertySheets в VS UI самым естественным способом, например, если вы используете это для переопределения/настройки OutputPaths, тогда VS UI wil отображает пустые или сломанные выходные пути и пытается использовать VS UI для их исправления/изменения, в свою очередь перезаписывает ваши интеллектуальные настройки, которые читают их из общего конфигурационного файла. Очевидно, не так ли.

EDIT: здесь быстро объясняется: Partial .csproj Files, однако, пожалуйста, прочитайте мои комментарии ниже, на всякий случай.

+0

Большое спасибо за ваш ответ. Я знаю, как изменить конфигурацию, отредактировав файл проекта xml, и я также знаю, как их изменить в VS GUI. То, что я хочу достичь, - это изменить простое значение, а затем все проекты, использующие значение, будут изменены, например, изначально я использую .NET framework 4.0 для всех проектов, и теперь я хочу использовать 4.5 –

+0

Единственный способ сделать это как я уже сказал, используя директиву MSBuild «import» в файле .csproj. Вы создадите дополнительный файл «полупроекта», который установит некоторые общие свойства, и каждый из ваших проектов «включит» этот специальный файл. См. Эту тему: http://stackoverflow.com/questions/157149/partial-csproj-files Соблюдайте и внимательно следите за тем, что они говорят о «наиболее полученных» файлах. Если projectA включает projectB, который включает projectC, и если projectD также включает ProjectC, тогда вы должны ** ** ** иметь projectA и projectD, присоединенные к Solution в VS IDE. – quetzalcoatl

+0

Обратите внимание, что для дополнительного проектаB и projectC НЕ нужно заканчивать на .csproj. Вы можете «включить» любой файл, который находится в правильном формате XML/MSBuild. Это означает, что вы можете назвать их по-разному и включить их в решение тоже, но НЕ как проекты, а скорее как простые XML-файлы. Это упростит их редактирование. Тем не менее, вы все равно должны быть очень осторожны: VS IDE часто не замечает изменений, внесенных вами в эти дополнительные файлы, если вы не перезагрузите решение/projectA/projectD. Fortunatelly, это только проблема с IDE. Опция «Build» всегда будет читать все правильно. – quetzalcoatl

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