dotnet publish发布含Azure资源组项目的解决方案找不到exe如何解决
根因说明
你的判断完全正确,Azure资源组项目属于部署配置类项目,本身仅包含ARM模板、PowerShell脚本等静态文件,没有编译生成的可执行文件,dotnet publish默认会对解决方案下所有可识别项目执行可执行输出校验,因此触发报错。
可用配置方案
方案1:修改项目属性(最常用)
- 打开Azure资源组项目的项目文件(通常后缀为
.azproj或.msbuildproj),在首个<PropertyGroup>节点下添加2行配置:
<!-- 禁止dotnet publish对该项目执行可执行文件校验 --> <IsPublishable>false</IsPublishable> <!-- 项目内静态文件自动复制到项目自身输出目录 --> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
- 打开Web API项目的项目文件,添加配置将资源组项目的静态文件同步到API发布目录:
<ItemGroup> <!-- 把路径替换为你实际的Azure资源组项目相对路径,下面示例假设两个项目在同级目录,资源组项目名为MyAzureRG --> <Content Include="..\MyAzureRG\**\*.json;..\MyAzureRG\**\*.ps1" CopyToPublishDirectory="PreserveNewest" Link="AzureDeploymentFiles\%(RecursiveDir)%(Filename)%(Extension)" /> </ItemGroup>
配置中Link属性的AzureDeploymentFiles是发布后静态文件在API输出目录中的子文件夹名,可根据需求自定义。
方案2:发布时指定仅发布Web API项目
不需要修改项目配置,执行publish命令时直接指定目标为Web API项目,跳过资源组项目即可:
dotnet publish 你的Web API项目路径/项目名.csproj -c Release -o 输出目录路径
如果需要同步资源组文件,还是需要添加方案1中Web API项目的Content节点配置。
方案3:解决方案级全局配置
如果需要经常执行解决方案级别的dotnet publish 解决方案名.sln命令,可以在解决方案根目录新建Directory.Build.props文件,全局过滤资源组项目的publish校验:
<Project> <PropertyGroup Condition="'$(MSBuildProjectExtension)' == '.azproj'"> <IsPublishable>false</IsPublishable> </PropertyGroup> </Project>
该配置会自动对所有后缀为.azproj的资源组项目生效,无需单独修改每个资源组项目文件。
内容的提问来源于stack exchange,提问作者Esteban Cervantes
相关产品推荐
相关产品推荐

