Жизненный цикл создания пакета сборки .Net Core MS - PullRequest
0 голосов
/ 14 сентября 2018

MSBuild довольно мощный и важный инструмент, но иногда его настройка так же сложна, как создание космического корабля или полет на Марс.Ответы на следующие вопросы могут помочь сделать его немного более полезным и удобным для разработчиков: - Как MSBuild создает пакет (zip)?- Использует ли он какие-то временные папки или напрямую из сборки?- Почему содержимое выходной папки может отличаться от содержимого пакета - Какие события можно использовать для добавления некоторой пользовательской логики?

Ответы на этот вопрос могут помочь мне в следующем длинном рассказе: я работаю с решением .Net Core, которое зависит от некоторых других DLL-файлов решений (на которые нет прямой ссылки, нодолжен быть в папке решения).В событии CL после сборки есть опция, добавленная в качестве точки входа "\ TaskEP", которая является отправной точкой следующего конвейера:

<PropertyGroup>
<PipelineCopyAllFilesToOneFolderForMsdeployDependsOn>
  TaskEP;
  Task2;
  Task3;
  $(PipelineCopyAllFilesToOneFolderForMsdeployDependsOn);
</PipelineCopyAllFilesToOneFolderForMsdeployDependsOn>
<RunPostBuildEvent>Always</RunPostBuildEvent>

Задачи в основном выполняются для добавления дополнительных DLL в пакет и вВ общем, выглядит так:

<Target Name="TaskEP" Condition="$(SomeConditions) == 'True'">
    <Message Importance="high" Text="TaskEP: Copying some files..." />
    <ItemGroup>
      <ItemsName Include="$(MSBuildProjectDirectory)\..\..somepath..\Extra.dll;....dll" />
      <FilesForPackagingFromProject Include="%(ItemsName.Identity)">
        <DestinationRelativePath>bin\%(RecursiveDir)%(Filename)%(Extension)</DestinationRelativePath>
      </FilesForPackagingFromProject>
    </ItemGroup>
  </Target>

По сути, для меня эта инструкция для MSBuild по добавлению «Extra.dll» в выходной пакет.
Pubxml довольно обычная:И одна инструкция, которая заменяет длинный длинный путь в пакете на короткий и определенный:

<Target Name="AddReplaceRuleForAppPath" BeforeTargets="BeforePublish">
<Message Text="Adding replace rules for application path '$(PublishIntermediateOutputPath)' replace with '$(_PackagePathShortened)'" Importance="high" />
<EscapeTextForRegularExpressions Text="$(PublishIntermediateOutputPath)">
  <Output PropertyName="_PackagePathRegex" TaskParameter="Result" />
</EscapeTextForRegularExpressions>
<!-- Add a replace rule for VSMSDeploy resp. MSdeploy to update the path -->
<ItemGroup>
  <MsDeployReplaceRules Include="replaceFullPath">
    <Match>$(_PackagePathRegex)</Match>
    <Replace>$(_PackagePathShortened)</Replace>
  </MsDeployReplaceRules>
</ItemGroup>

Я также продублировал те же задачи «Копировать» здесь в файле .pubxml, поиграйте сРазличные события "AfterBuild", "BeforePublish", но, кажется, что все просто игнорируя.Я вижу «дополнительные» DLL-файлы в выходном каталоге сборки и все информационные сообщения при публикации, но не в конечном файле «Super.WebApplication.zip»!

1 Ответ

0 голосов
/ 14 сентября 2018

Решение, которое я нашел для копирования дополнительных файлов в .Net Core, взято из этой документации

<ItemGroup>
    <DotnetPublishFiles Include="$(MSBuildProjectDirectory)\..\..somepath..\Extra.dll;....dll" >
      <DestinationRelativePath>bin\x86\%(RecursiveDir)%(Filename)%(Extension)</DestinationRelativePath>
    </DotnetPublishFiles>
  </ItemGroup>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...