我想将 Blazor 应用程序(Web 程序集)部署到 Azure 应用服务。
我想将Azure应用服务的环境设置为开发。
我尝试将其设置为“开发”。
但是部署后,它显示环境:生产。
主页.razor:
@using Microsoft.AspNetCore.Components.WebAssembly.Hosting
@inject IWebAssemblyHostEnvironment HostEnvironment
<PageTitle>Index</PageTitle>
<p>Environment: @HostEnvironment.Environment</p>
请任何人都可以建议如何将 Azure 应用服务上的环境设置为开发,而不是默认设置为生产。
非常感谢。
最佳答案
您需要修改您的web.config
传递我最近尝试过的 header 中的变量。
您可以在 Azure 中手动测试此功能,方法是转到部署槽并在开发工具下选择应用服务编辑器(预览版)。
这将显示已部署应用程序的根目录,并且您将看到 Azure 已创建 web.config
如果不存在,则为您提供。
您可以像这样手动添加 header :
<httpProtocol>
<customHeaders>
<add name="Blazor-Environment" value="Development" />
</customHeaders>
</httpProtocol>
这位于 <system.webServer>
内标签。
Azure 为我创建了这个(您可以看到我插入 header 的位置):
现在,当您加载页面时,您的应用程序将加载正确的 app.{environment}.json 文件:
根据您的发布方式,您可能需要创建单独的 web.{environment}.config 文件:
如果在 Visual Studio IDE 中使用 .pubxml 发布功能,您可以这样做:
添加多个
web.config
文件添加到您的项目中,每个文件都针对特定环境而设计。你可以将它们命名为web.Production.config
,web.Testing.config
等确保设置
Copy to Output Directory
这些文件的属性为Do not copy
.然后,在每个
.pubxml
中文件中,添加Target
这将重命名相应的web.*.config
至web.config
在发布过程中。
例如,如果您有 Production.pubxml
,您可以包括:
<Target Name="WebConfigReplacement" BeforeTargets="CopyAllFilesToSingleFolderForPackage">
<Move SourceFiles="$(ProjectDir)web.Production.config" DestinationFiles="$(ProjectDir)web.config" OverwriteReadOnlyFiles="true"/>
</Target>
对于Testing.pubxml
,您可以包括:
<Target Name="WebConfigReplacement" BeforeTargets="CopyAllFilesToSingleFolderForPackage">
<Move SourceFiles="$(ProjectDir)web.Testing.config" DestinationFiles="$(ProjectDir)web.config" OverwriteReadOnlyFiles="true"/>
</Target>
记得更改路径$(ProjectDir)web.Production.config
和$(ProjectDir)web.Testing.config
匹配您的 web.*.config
的实际位置文件。
这将取代 web.config
在发布过程中使用特定于环境的文件。 web.config
再次从 web.config.template
创建每次在本地环境中构建项目时都会生成文件。
注意:在尝试此操作之前,请务必备份您的文件,如使用Move
任务将覆盖您的文件。在部署到生产环境之前,始终在安全的环境中进行测试。
此外,您应该排除 web.config
来自源代码管理的文件,以防止意外提交特定于环境的配置。
关于Azure 应用服务为 Blazor 应用程序设置环境吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73001329/