Пакеты отсутствуют после успешной публикации dotnet - PullRequest
6 голосов
/ 26 июня 2019

Команда publish работает нормально, но после ее запуска мне нужно восстановить проект, так как отсутствуют пакеты ...

Так что, если я выполню следующую команду:

dotnet publish --runtime win-x64

Тогда публикация работает, но в моем проекте сразу после этого отсутствуют пакеты.

НО, если я запускаю публикацию без времени выполнения:

dotnet publish

Тогда публикация работает нормально, и у меня нет пропущенного пакета.

Это нормальное поведение?Что я могу сделать, чтобы это исправить?Это раздражает.

Вот мой файл csproj:

<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
    <TargetFramework>netcoreapp2.1</TargetFramework>
    <CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>
    <LangVersion>7.1</LangVersion>
</PropertyGroup>
<ItemGroup>
    <PackageReference Include="AWSSDK.Extensions.NETCore.Setup">
        <Version>3.3.6</Version>
    </PackageReference>
    <PackageReference Include="Microsoft.AspNetCore.App">
    </PackageReference>
    <PackageReference Include="Microsoft.AspNetCore.StaticFiles">
        <Version>2.1.1</Version>
    </PackageReference>
    <PackageReference Include="NSwag.AspNetCore">
        <Version>12.0.13</Version>
    </PackageReference>
    <PackageReference Include="NSwag.MSBuild">
        <Version>12.0.13</Version>
    </PackageReference>
</ItemGroup>
<ItemGroup>
    <ProjectReference Include="..\MyProject.Analytics\MyProject.Analytics.csproj" />
    <ProjectReference Include="..\MyProject.ApiClient\MyProject.ApiClient.csproj" />
    <ProjectReference Include="..\MyProject.CommonApi\MyProject.CommonApi.csproj" />
    <ProjectReference Include="..\MyProject.Common\MyProject.Common.csproj" />
    <ProjectReference Include="..\MyProject.DbAccess\MyProject.DbAccess.csproj" />
    <ProjectReference Include="..\MyProject.Logging\MyProject.Logging.csproj" />
    <ProjectReference Include="..\MyProject.Messaging\MyProject.Messaging.csproj" />
    <ProjectReference Include="..\MyProject.Model\MyProject.Model.csproj" />
    <ProjectReference Include="..\MyProject.Settings\MyProject.Settings.csproj" />
</ItemGroup>
<ItemGroup>
    <Content Update="appsettings.Api.Development.json">
        <CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
        <CopyToOutputDirectory>Always</CopyToOutputDirectory>
    </Content>
    <Content Update="appsettings.Api.json">
        <CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
        <CopyToOutputDirectory>Always</CopyToOutputDirectory>
    </Content>
    <Content Update="appsettings.Api.Production.json">
        <CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
        <CopyToOutputDirectory>Always</CopyToOutputDirectory>
    </Content>
    <Content Include=".ebextensions\never-sleep-again.config">
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
    </Content>
    <Content Update="appsettings.Api.PreProduction.json">
      <CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
    </Content>
</ItemGroup>
<ItemGroup>
  <Folder Include="MyProjectlogs\Development" />
</ItemGroup>
<ItemGroup>
    <ProjectCapability Include="SourceItemsFromImports" />
</ItemGroup>
<Target Name="NSwag" AfterTargets="Build">
    <Copy SourceFiles="@(Reference)" DestinationFolder="$(OutDir)References" />
    <Exec Command="$(NSwagExe_Core21) run nswag.json /variables" />
    <RemoveDir Directories="$(OutDir)References" />
</Target>

Редактировать: Из журналов восстановления нативов я получаю следующее для каждой зависимости проекта, которую яpublish

@   Project 'MyProject.Api' is affected (InstallCount = 0)

Так что на самом деле он думает, что что-то другое, но, похоже, ничего не устанавливает.

1 Ответ

2 голосов
/ 19 июля 2019

Копаясь, я нашел этот пост .

Интересная часть:

восстановление и сборка могут выполняться неявно как часть другой команды,нравится публиковать.Когда они запускаются неявно как часть другой команды, им предоставляется дополнительный контекст для создания правильных артефактов.Когда вы публикуете во время выполнения (например, dotnet publish -r linux-x64), неявное восстановление восстанавливает пакеты для среды выполнения linux-x64.Если вы вызываете restore явно, он не восстанавливает пакеты времени выполнения по умолчанию, потому что у него нет этого контекста.

В основном я добавляю несоответствие между средой выполнения .netcore 2.1.1 и восстановлением.2.1.X (X! = 1).

Решение (объяснено по ссылке выше) состоит в том, чтобы добавить это в файл проекта:

<PropertyGroup>
    ...
    <RuntimeIdentifiers>win-x64</RuntimeIdentifiers>
    <TargetLatestRuntimePatch>true</TargetLatestRuntimePatch>
</PropertyGroup>
...