Как указать расположение файла решения для создания версий информационных файлов сборки в 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).
Замечания: это просто обходной путь, а не идеальное решение. Это не будет версия всех сборок в проекте. Например, если мы хотим знать, какая сборка была построена в какой версии, это не сработает. Это просто заполнитель, чтобы получить версию решения для сборки.