Публикация в Azure не обновляет файлы в App_Data - PullRequest
0 голосов
/ 25 апреля 2019

В моем приложении ASP.Net Core есть папка App_Data, расположенная в корневом каталоге проекта:

Folders

(Насколько я помню - я могу ошибаться - мне пришлось вручную создать эту папку в проекте. Шаблон не дал ее мне автоматически.)

Моя проблема заключается в том, что изменения в файлах в папке App_Data не отправляются в Azure при публикации проекта. Я пользуюсь VS Pro 2019.

Когда я впервые опубликовал проект, папка App_Data и ее содержимое были отправлены в Azure. Но, как я уже сказал, изменения игнорируются.

Вот большая проблема, которую я не понимаю: очевидно, папка App_Data особенная. По крайней мере, у него есть запись в профиле публикации. И я видел много вопросов и неосведомленных ответов о трудностях публикации (или не публикации) файлов, которые живут в этой волшебной папке. Но я никогда не видел ничего похожего на официальную документацию, в которой говорится об этой магии.


Вот мой профиль публикации:

    <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <WebPublishMethod>MSDeploy</WebPublishMethod>
    <ResourceId>/subscriptions/xxx/resourceGroups/Production/providers/Microsoft.Web/sites/xxx</ResourceId>
    <ResourceGroup>Production</ResourceGroup>
    <PublishProvider>AzureWebSite</PublishProvider>
    <LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration>
    <LastUsedPlatform>Any CPU</LastUsedPlatform>
    <SiteUrlToLaunchAfterPublish>http://xxx.azurewebsites.net</SiteUrlToLaunchAfterPublish>
    <LaunchSiteAfterPublish>True</LaunchSiteAfterPublish>
    <ExcludeApp_Data>False</ExcludeApp_Data>
    <ProjectGuid>xxx</ProjectGuid>
    <MSDeployServiceURL>xxx.scm.azurewebsites.net:443</MSDeployServiceURL>
    <DeployIisAppPath>xxx</DeployIisAppPath>
    <RemoteSitePhysicalPath />
    <SkipExtraFilesOnServer>True</SkipExtraFilesOnServer>
    <MSDeployPublishMethod>WMSVC</MSDeployPublishMethod>
    <EnableMSDeployBackup>True</EnableMSDeployBackup>
    <UserName>$xxx</UserName>
    <_SavePWD>True</_SavePWD>
    <_DestinationType>AzureWebSite</_DestinationType>
    <InstallAspNetCoreSiteExtension>False</InstallAspNetCoreSiteExtension>
    <TargetFramework>netcoreapp2.2</TargetFramework>
    <SelfContained>false</SelfContained>
    <_IsPortable>true</_IsPortable>
  </PropertyGroup>
</Project>

и вот мой файл проекта (отредактированный для краткости):

<Project Sdk="Microsoft.NET.Sdk.Web">

  <PropertyGroup>
    <TargetFramework>netcoreapp2.2</TargetFramework>
    <UserSecretsId>aspnet-xxx</UserSecretsId>
    <ApplicationInsightsResourceId>/subscriptions/xxx/resourcegroups/xxx/providers/microsoft.insights/components/xxx</ApplicationInsightsResourceId>
    <ApplicationInsightsAnnotationResourceId>/subscriptions/xxx/resourcegroups/MyIndigoHealth/providers/microsoft.insights/components/xxx</ApplicationInsightsAnnotationResourceId>
    <AspNetCoreHostingModel>InProcess</AspNetCoreHostingModel>
    <TypeScriptToolsVersion>3.1</TypeScriptToolsVersion>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.ApplicationInsights.AspNetCore" Version="2.6.1" />
    <PackageReference Include="Microsoft.AspNetCore.App" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="2.2.3" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="2.2.3">
      <PrivateAssets>all</PrivateAssets>
      <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
    </PackageReference>
    <PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="2.2.3" PrivateAssets="All" />
    <PackageReference Include="Neleus.DependencyInjection.Extensions" Version="1.0.0" />
  </ItemGroup>

  <ItemGroup>
    <Folder Include="Areas\Identity\Services\" />
  </ItemGroup>

  <ItemGroup>
    <WCFMetadata Include="Connected Services" />
  </ItemGroup>

</Project>

Ответы [ 2 ]

1 голос
/ 26 апреля 2019

Согласно официальной документации :

Список элементов контента содержит файлы, которые публикуются в дополнение к результаты сборки. По умолчанию файлы, соответствующие шаблону wwwroot/** включены в элемент контента.

Подразумевается (неясно указано), что ТОЛЬКО создают выходные данные и wwwroot/** публикуются.

Позже в той же документации они приводят примеры (без объяснения) разметки, которая добавляет дополнительные файлы к набору публикуемых файлов. На основании этих примеров я подготовил эту разметку. Добавление этого файла в файл проекта (csproj) приводит к публикации измененных файлов в папке App_Data:

<ItemGroup>
    <DotnetPublishFiles Include="App_Data/**/*">
        <DestinationRelativePath>App_Data/%(RecursiveDir)%(Filename)%(Extension)</DestinationRelativePath>
    </DotnetPublishFiles>
</ItemGroup>

Это все еще оставляет пару связанных загадок:

  1. Что на самом деле делает элемент <ExcludeApp_Data>?
  2. Очевидно, что первоначальная публикация (из Visual Studio) отправляет папку App_Data на сервер. Почему это происходит, когда в экспериментах и ​​вышеупомянутой документации говорится, что при последующих попытках публикации игнорируется папка App_Data (и, действительно, любая папка за пределами wwwroot)?
1 голос
/ 25 апреля 2019

Если вы щелкните правой кнопкой мыши свой веб-проект и выберите «Публикация»> «Настройки»> «Параметры публикации файлов», а затем снимите флажок «Исключить файлы из папки App_Data», что произойдет?

publish

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...