2015-11-10 3 views
2

В настоящее время я работаю где-то с некоторыми стандартными настройками, которые применяются к решениям, но мне приходится неоднократно применять настройки снова и снова. Я задавался вопросом, каким лучшим решением было бы автоматизировать некоторые из этого.Общие цели сборки и обновления файла assembly.cs

Для например:

  1. Assembly.cs должен обновляться каждый раз, чтобы включить [сборочной: AssemblyInformationalVersion ("0.0.0.0")]
  2. проекты должны иметь это добавить вручную

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

Это немного утомительно, если есть несколько проектов, которые должны иметь отредактированные файлы csproj, и некоторые настройки msbuild добавляются каждый раз.

Любые советы были бы высоко оценены.

+1

Создайте свой собственный шаблон проекта с помощью файла> Экспорт шаблона. –

+0

Thats awesome, я даже не думал об этом! Вы должны были добавить это как ответ, как то, что мне нужно. –

ответ

4

Способ сделать это - использовать пользовательскую задачу, предоставляемую проектом с открытым исходным кодом http://msbuildtasks.tigris.org/.

Существует задача AssemblyInfoFile, которая записывает сборку как указано.

Вы можете создать файл .proj, который импортирует эту задачу:

<Import Project="YourPathToCommunity.targets\MSBuild.Community.Tasks.Targets" />

, а затем выполняет его перед компиляцией.

<Target Name="BeforeCompile"> <AssemblyInfo OutputFile="Properties\AssemblyInfo.cs" AssemblyVersion="$(AssemblyVersion)" AssemblyFileVersion="$(AssemblyVersion)"/> </Target>

Затем для каждого файла проекта, который вы хотите это поведение следует применять, только импортировать файл .proj, определенный в предыдущем шаге:

<Import Project="PathToYourProj\myDefinedProj.proj" />

+1

Thats great. Смесь вашего ответа и ответа от Ганса прекрасна. Спасибо. –

2

Первые вещи первых, когда эти проекты необходимо обновить? Используете ли вы какой-либо пользовательский процесс сборки?

Если вы делаете это ВСЕ, не только тогда, когда вам нужна готовая версия, чтобы быть версией, тогда вы должны сделать то, что рекомендуется @ arthur-rizzo, и добавляю, что вы должны назвать свой файл с помощью. цели, поскольку он добавляет общую цель для дополнения проекта, а не отдельный проект. Кроме того, убедитесь, что вы импортируете этот файл после любого другого импорта, который мог бы переопределить цель BeforeCompile. Более безопасный способ сделать это IMHO - дать вашей цели какое-то другое имя, например «UpdateAssemblyFile», и добавить атрибут BeforeTargets = «Скомпилировать», поэтому вы убедитесь, что ваша цель не будет переопределяться, и для других разработчиков становится понятным, что намереваться цели.

Так что ваш файл будет что-то вроде:

<Import Project="YourPathToCommunity.targets\MSBuild.Community.Tasks.Targets" /> 
<Target Name="UpdateAssemblyFile" BeforeTargets="Compile"> 
    <AssemblyInfo OutputFile="Properties\AssemblyInfo.cs" 
     AssemblyVersion="$(AssemblyVersion)" 
     AssemblyFileVersion="$(AssemblyVersion)"/> 
</Target> 

И вы будете импортировать его в всех проектах, которые вы хотите это нестандартное поведение, как это: <Import Project="TheFileYouCreated.targets" />

Не забудьте добавить этот файл к используемому вами источнику.

Кредиты для @ arthur-rizzo для получения исходного ответа и добавления ссылки на библиотеку пользовательских задач.