发布ASP.NET Core Web API到Azure时OutputPath属性未设置报错如何解决
问题成因
- 配置组合不匹配:发布流程使用了
Debug|AnyCPU配置组合编译项目,但主项目仅为自定义的Latest|AnyCPU配置定义了OutputPath属性,数据层、模型层项目完全没有为Debug、Release等常规配置定义OutputPath,编译时无法找到输出路径触发报错。 - 平台属性配置错误:主项目的
Latest|AnyCPU配置节点中PlatformTarget同时指定了AnyCPU;x86两个值,单配置节点下仅支持指定单一平台,会导致编译时平台识别异常。 - 引用项目配置未对齐:主项目引用CoreDataLayer、Model两个类库时,主项目使用的配置未在被引用项目中声明对应配置段,符合报错中描述的项目引用配置不匹配场景。
解决方案
- 第一步:统一所有项目的配置定义,补全Debug、Release常规配置的OutputPath
- 修正主项目.csproj文件,删除错误的多平台指定,补全常规配置段:
<Project Sdk="Microsoft.NET.Sdk.Web"> <PropertyGroup> <TargetFramework>netcoreapp2.1</TargetFramework> <AspNetCoreHostingModel>InProcess</AspNetCoreHostingModel> <_HasReferenceToSystemRuntime>true</_HasReferenceToSystemRuntime> <UserSecretsId>acb71015-f783-4442-90c2-3f2aaff100c6</UserSecretsId> <StartupObject>NIOXDashboard.Program</StartupObject> <OutputType>Exe</OutputType> <Platforms>AnyCPU;x86</Platforms> </PropertyGroup> <!-- 补全Debug配置 --> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'"> <PlatformTarget>AnyCPU</PlatformTarget> <OutputPath>bin\Debug\</OutputPath> </PropertyGroup> <!-- 补全Release配置,发布推荐用Release --> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'"> <PlatformTarget>AnyCPU</PlatformTarget> <OutputPath>bin\Release\</OutputPath> <Optimize>true</Optimize> </PropertyGroup> <!-- 如确需使用Latest自定义配置可保留,但需同步在类库项目中添加相同配置 --> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Latest|AnyCPU'"> <PlatformTarget>AnyCPU</PlatformTarget> <OutputPath>bin\Output</OutputPath> </PropertyGroup> <ItemGroup> <PackageReference Include="Microsoft.AspNetCore.App" /> </ItemGroup> <ItemGroup> <ProjectReference Include="..\CoreDataLayer\CoreDataLayer.csproj" /> <ProjectReference Include="..\Model\Model.csproj" /> </ItemGroup> </Project>- 修正CoreDataLayer.csproj,补全配置段:
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <TargetFramework>netcoreapp2.1</TargetFramework> <Platforms>AnyCPU;x86</Platforms> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'"> <OutputPath>bin\Debug\</OutputPath> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'"> <OutputPath>bin\Release\</OutputPath> <Optimize>true</Optimize> </PropertyGroup> <!-- 如保留主项目的Latest配置,此处也需添加对应Latest配置段,OutputPath可自行定义 --> <ItemGroup> <PackageReference Include="Dapper" Version="2.0.90" /> <PackageReference Include="System.Data.SqlClient" Version="4.8.2" /> </ItemGroup> </Project>- 修正Model.csproj,补全配置段:
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <TargetFramework>netcoreapp2.1</TargetFramework> <Platforms>AnyCPU;x86</Platforms> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'"> <OutputPath>bin\Debug\</OutputPath> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'"> <OutputPath>bin\Release\</OutputPath> <Optimize>true</Optimize> </PropertyGroup> <!-- 如保留主项目的Latest配置,此处也需添加对应Latest配置段 --> <ItemGroup> <PackageReference Include="Newtonsoft.Json" Version="12.0.3" /> </ItemGroup> </Project> - 第二步:调整发布配置
发布到Azure应用服务时,推荐使用Release配置,平台统一选择AnyCPU。若你的Azure应用服务开启了32位运行模式,将所有项目的PlatformTarget统一改为x86即可。 - 第三步:校验解决方案配置
右键Visual Studio解决方案 -> 选择「配置管理器」,确认你发布使用的配置和平台下,所有项目的「生成」复选框都已勾选,没有被跳过生成的项目。
完成以上操作后重新发布即可解决该报错。
内容的提问来源于stack exchange,提问作者skt
相关产品推荐
相关产品推荐

