Как установить путь вывода нескольких визуальных проектов C # - PullRequest
32 голосов
/ 07 марта 2009

У меня есть решение, которое содержит несколько проектов на c #, и я хотел бы иметь возможность установить путь вывода и другие свойства для всех проектов в одном месте. Листы свойств (vsprops) не доступны для проектов C #, а переменная $ (SolutionDir) игнорируется. Существуют ли другие методы для установки свойств в нескольких проектах C #?

Обновление Следуя информации в ответе Bas Bossink, я смог установить выходной путь нескольких проектов, создав общий csproj и импортировав его в отдельный проект. Несколько других моментов:

  • При сборке в Visual Studio, если в общий проект вносятся изменения, необходимо коснуться / перезагрузить все проекты, которые ссылаются на него, для изменений, которые нужно получить.
  • Любые свойства, которые также установлены в отдельном проекте, будут переопределять общие свойства.
  • Установка $ (SolutionDir) в качестве пути вывода через пользовательский интерфейс Visual Studio не работает должным образом, так как значение обрабатывается как строковый литерал, а не расширяется. Однако установка $ (SolutionDir) непосредственно в файл csproj с помощью текстового редактора работает, как и ожидалось.

Ответы [ 4 ]

38 голосов
/ 07 марта 2009

Файл csproj уже является файлом msbuild, это означает, что файлы csproj также могут использовать элемент импорта, как описано здесь . Элемент импорта именно то, что вам нужно. Вы можете создать Common.proj, который содержит что-то вроде:

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="3.5"xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
    <OutputPath>$(SolutionDir)output</OutputPath>
    <WarningLevel>4</WarningLevel>
    <UseVSHostingProcess>false</UseVSHostingProcess>
    <TreatWarningsAsErrors>true</TreatWarningsAsErrors>
</PropertyGroup>
</Project>

Вы можете импортировать этот Common.proj в каждый из ваших csprojs, например, так:

<Import Project="..\Common.proj" />

Оператор импорта должен предшествовать любым задачам, которые зависят от свойств, определенных в Common.proj

Надеюсь, это поможет. Я не могу подтвердить ваши проблемы с переменной $ (SolutionDir), которую я использовал много раз. Однако я знаю, что эта переменная не устанавливается, когда вы запускаете команду msbuild через командную строку в конкретном проекте, который содержится в решении. Он будет установлен при сборке вашего решения в Visual Studio.

1 голос
/ 07 марта 2009

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

Для подобных вещей (применять изменения сразу к нескольким текстовым файлам) я лично использую WildEdit от Helios Software - работает как шарм и по разумной цене.

Но я уверен, что существует множество бесплатных альтернатив.

0 голосов
/ 19 марта 2017

Установите свойство $(OutputPath) в списке общих свойств. Затем удалите эту запись во всех файлах проекта, на которые вы хотите повлиять. Затем импортируйте этот список свойств во все ваши проекты.

Для сотен проектов, которые могут быть очень утомительными. Вот почему я написал инструмент, чтобы помочь с этим:

https://github.com/chris1248/MsbuildRefactor

0 голосов
/ 07 марта 2009

Я бы посоветовал вам использовать инструмент сборки, такой как MSBuild или NAnt , который обеспечит вам большую гибкость при сборке. По сути, идея состоит в том, чтобы начать сборку, используя (в большинстве случаев) один настраиваемый файл сборки.

Я бы лично порекомендовал NAnt.

Вы можете найти потрясающее руководство по NAnt в блоге JP Boodhoo здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...