【发布时间】:2017-03-29 07:18:21
【问题描述】:
我有 netcoreapp1.1,我正在尝试使用 WebDeploy 发布到 Azure。我可以执行 dotnet publish 并将内容部署到 Azure,但该站点只是说“您无权查看此目录或页面。”,这表明该应用程序未运行。
我以前的应用程序使用 net461 作为目标框架,我注意到发布这些(使用dotnet publish)会导致创建一个 web.config 文件,这解释了 IIS 如何运行它,但这并没有当目标框架为 netcoreapp1.1 时发生。
我用来发布的命令是这样的:
dotnet publish --configuration Release --runtime win7-x64 --output .deploy
这是我的项目文件:
<Project Sdk="FSharp.NET.Sdk;Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>netcoreapp1.1</TargetFramework>
<RuntimeIdentifiers>win7-x64</RuntimeIdentifiers>
<OutputType>Exe</OutputType>
</PropertyGroup>
<PropertyGroup>
</PropertyGroup>
<ItemGroup>
<Compile Include="Controllers/*.fs" />
<Compile Include="Startup.fs" />
<Compile Include="Program.fs" />
<None Remove="**/*.fs" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="FSharp.Core" Version="4.1.*" />
<PackageReference Include="FSharp.NET.Sdk" Version="1.0.*" PrivateAssets="All" />
<PackageReference Include="Microsoft.AspNetCore" Version="1.1.1" />
<PackageReference Include="Microsoft.AspNetCore.Mvc" Version="1.1.2" />
<PackageReference Include="Microsoft.AspNetCore.StaticFiles" Version="1.1.1" />
<PackageReference Include="Microsoft.Extensions.Logging.Debug" Version="1.1.1" />
</ItemGroup>
<ItemGroup>
<DotNetCliToolReference Include="Microsoft.DotNet.Watcher.Tools" Version="1.0.0" />
</ItemGroup>
</Project>
我打算如何在 Azure 上运行 netcoreapp1.1?它必须是自包含的还是可以让 Azure 应用服务从 dll 运行它?
编辑:
手动将 web.config 复制到我的发布目录中,我可以让应用程序运行。如何让dotnet publish 自动创建它?
另外,我仍然对我之前的问题感到好奇。
【问题讨论】:
-
我不确定它是否与您相关,但这里我们遇到了。经典的 ASP.NET 和 Core 的运行方式是不同的。使用 ASP.NET Core azure 运行包含 Kestrel Http 服务器的可执行文件。这意味着您无法在运行时替换现有的可执行文件。我们必须停止服务复制文件并再次运行它。但是我们使用 Octupus 进行部署。
-
感谢您的回复。这是真的,但我的 WebDeploy 配置已经处理了这个问题:) 部署成功,但除非我手动将正确的 web.config 复制到发布目录中,否则应用程序不会启动。
-
嗯,我的 .proj 文件结构和你一样。当我运行 msbuild /t:restore; msbuild /t:构建;我的 PC 上的 msbuild /t:publish 我在发布文件夹中得到了我需要的一切。您的项目根目录中有 web.config 吗? PS,我用的是VS 2017。如果你愿意,我可以分享我们项目结构的截图。
标签: azure deployment f# asp.net-core .net-core