Visual Studio发布Azure Function时assets文件夹内dll被删除如何解决
问题根源
Azure Function 项目的默认发布流程会自动扫描并清理它认为未被项目引用的额外程序集(dll、pdb等),普通的Content配置和生成后事件仅能保证文件复制到本地生成输出目录,发布阶段的清理逻辑会把这些额外的程序集删掉,所以会出现本地目录有文件、发布后丢失的问题。
解决步骤
步骤1:禁用发布阶段的自动清理逻辑
在项目.csproj文件的<PropertyGroup>节点中添加以下配置:
<PropertyGroup> <!-- 原有项目配置保持不变,新增以下行 --> <FunctionsSkipCleanOutput>true</FunctionsSkipCleanOutput> </PropertyGroup>
该配置为Azure Function项目专用开关,关闭发布时的额外程序集清理逻辑。
步骤2:显式指定assets目录文件加入发布列表
替换你原来的Content配置为以下内容,通过优先级更高的ResolvedFileToPublish节点强制将assets目录下的所有文件纳入发布范围:
<ItemGroup> <!-- 保证本地生成时文件正常复制到输出目录 --> <Content Include="assets\**\*"> <CopyToOutputDirectory>Always</CopyToOutputDirectory> </Content> <!-- 显式指定文件发布路径和规则 --> <ResolvedFileToPublish Include="assets\**\*"> <RelativePath>assets\%(RecursiveDir)%(Filename)%(Extension)</RelativePath> <CopyToPublishDirectory>Always</CopyToPublishDirectory> </ResolvedFileToPublish> </ItemGroup>
可选补充配置:强制发布前复制文件
如果上述配置仍不生效,可以在.csproj中添加发布前执行的自定义复制目标,直接将assets目录复制到发布输出路径:
<Target Name="CopyCustomAssetsToPublishDir" AfterTargets="BeforePublish"> <ItemGroup> <AllAssetFiles Include="$(ProjectDir)assets\**\*" /> </ItemGroup> <Copy SourceFiles="@(AllAssetFiles)" DestinationFolder="$(PublishDir)assets\%(RecursiveDir)" SkipUnchangedFiles="true" OverwriteReadOnlyFiles="true" /> </Target>
完成以上配置后重新发布即可看到assets目录下的所有文件都被完整保留到发布目录。
内容的提问来源于stack exchange,提问作者praveen
相关产品推荐
相关产品推荐

