Как указать расположение файла решения для создания версий информационных файлов сборки в MSBUILD

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

Ниже приведена структура проекта

Папка с кодом

-> папка ProjectA

-> папка ProjectB

-> папка ProjectC

-> Папка решений

* Ранее файлы решений (.sln) находились в папке "Код".

Когда мы запускаем MSBuild, я получаю следующее предупреждение.

Файлы с информацией о сборке не были предоставлены

Ниже приведена урезанная версия журнала сборки.

Удалить рабочее пространство

00:00 Удалить каталог источников

00:00 Создать рабочее пространство

01:14 Получить рабочее пространство

00:00 Версии сборок

00:00 AssemblyVersion и AssemblyFileVersion Обработка версии сборки: использование шаблонов номеров версий, включенных в определение сборки

00:00 Установка всех значений свойств сборки (b) Версии сборок со следующими шаблонами: AssemblyVersion(1.0.0.0) и AssemblyFileVersion(yyyy.mm.dd.b) Не предоставлены файлы информации о сборке

Ниже приведена задача MSBuild, которая создает указанный выше журнал.

  <local:VersionAssemblyInfoFiles 
    AssemblyFileVersionPattern="[AssemblyFileVersionPattern]" 
    AssemblyInfoFilePattern=" AssemblyInfoFilePattern]" 
    AssemblyVersionPattern="[AssemblyVersionPattern]" 
    BuildDirectory="[BuildDirectory]" BuildNumberPrefix=" 
   [BuildNumberPrefix]" BuildSettings="[BuildSettings]" 
    DisplayName="Versioning Assemblies" 
    DoCheckinAssemblyInfoFiles="[DoCheckinAssemblyInfoFiles]" 
    ForceCreateVersion="[ForceCreateVersion]" 
    sap:VirtualizedContainerService.HintSize="200,22" 
    mva:VisualBasic.Settings="Assembly references and imported namespaces 
   serialized as XML namespaces" UseVersionSeedFile="[UseVersionSeedFile]" 
   VersionSeedFilePath="[VersionSeedFilePath]" Workspace="[Workspace]" 
   xmlns:local="clr-namespace:TfsBuild.Versioning.Activities;
   assembly=TfsBuild.Versioning.Activities">

      <sap:WorkflowViewStateService.ViewState>
        <scg:Dictionary x:TypeArguments="x:String, x:Object">
          <x:Boolean x:Key="ShouldCollapseAll">False</x:Boolean>
          <x:Boolean x:Key="ShouldExpandAll">True</x:Boolean>
        </scg:Dictionary>
      </sap:WorkflowViewStateService.ViewState>
 </local:VersionAssemblyInfoFiles>

Я также посмотрел на предложенное здесь решение, но не повезло. Может кто-нибудь указать мне правильное направление? Я не эксперт в MSBuild.

Заранее спасибо.

1 ответ

Решение

В итоге я сделал следующий обходной путь. У нас нет возможности перенести все решения на корневой уровень проекта.

а. Создайте новое решение, например SomeApp.Lib.Versioning.sln. Это решение будет находиться в корневой папке и используется только для управления версиями остальных проектов.

б. Проект (.csproj) для SomeApp.Lib.Versioning.sln будет находиться на том же уровне, что и остальные проекты.

Таким образом, новая структура

Папка с кодом

-> папка ProjectA

-> папка ProjectB

-> папка ProjectC

-> Папка решений

-> SomeApp.Lib.Versioning.sln

-> SomeApp.Lib.Versioning folder

с. Теперь я ссылаюсь на SomeApp.Lib.Versioning.proj из одного из решений в папке Solutions. Это означает, что SomeApp.Lib.Versioning.proj имеет два решения, связанных с попаданием.

д. Проект, который отображает версию сборки, будет использовать тип, т.е. файл класса из SomeApp.Lib.Versioning.proj

Согласно стандартной версии сборки, SomeApp.Lib.Versioning.proj будет иметь правильную версию сборки (SomeApp.Lib.Versioning.sln находится на уровне Root).

Замечания: это просто обходной путь, а не идеальное решение. Это не будет версия всех сборок в проекте. Например, если мы хотим знать, какая сборка была построена в какой версии, это не сработает. Это просто заполнитель, чтобы получить версию решения для сборки.

Другие вопросы по тегам