【问题标题】:Publish to Azure doesn't update files in App_Data发布到 Azure 不会更新 App_Data 中的文件
【发布时间】:2019-09-15 04:00:12
【问题描述】:

我的 ASP.Net Core 应用在项目根目录下有一个 App_Data 文件夹:

(我记得——我可能弄错了——我必须在项目中手动创建该文件夹。模板没有自动给我。)

我的问题是,当我发布我的项目时,对 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>

【问题讨论】:

    标签: visual-studio azure asp.net-core


    【解决方案1】:

    据官方documentation

    内容项列表包含除 构建输出。默认情况下,匹配模式wwwroot/**的文件 包含在内容项中。

    暗示(未明确说明)是仅发布构建输出和wwwroot/**

    稍后在同一文档中,他们给出了标记示例(没有解释),这些标记将附加文件添加到正在发布的文件集中。基于这些示例,我制作了这个标记。将此添加到项目 (csproj) 文件会导致 App_Data 文件夹中更改的文件被发布:

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

    这仍然留下了一些相关的谜团:

    1. &lt;ExcludeApp_Data&gt; 元素的真正作用是什么?
    2. 显然,初始发布(来自 Visual Studio)将App_Data 文件夹推送到服务器。为什么会发生这种情况,当实验和上面引用的文档说随后的发布尝试忽略 App_Data 文件夹(实际上,wwwroot 之外的任何文件夹)?

    【讨论】:

      【解决方案2】:

      如果您右键单击您的 Web 项目并选择发布 > 设置 > 文件发布选项,然后取消选中“从 App_Data 文件夹中排除文件”会发生什么?

      【讨论】:

      • 看起来 App_Data 文件夹已经不在他的发布配置文件中了:&lt;ExcludeApp_Data&gt;False&lt;/ExcludeApp_Data&gt;
      • 没错。发布配置文件不会说谎... UI 中的复选框已取消选中。
      • 我也尝试将文件标记为“内容”(而不是“无”)。这没什么区别。
      • 也许这个冗长的、被接受的答案会对你有所帮助:stackoverflow.com/questions/8900005/…
      • 这是我不明白的更大问题:显然,App_Data 文件夹很特殊。至少,它在发布配置文件中有一个条目。我已经看到了很多关于发布(或不发布)位于这个神奇文件夹中的文件的困难的问题和不知情的答案。但是我从来没有见过任何接近官方文档的东西来谈论这个魔法。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多