首页 > 解决方案 > Visual Studio 发布,不包括发布目录中的自定义 dll

问题描述

我有一个 Azure 函数,它有一个assets文件夹(需要一些东西),其中包含一些文件,包括、.pdb等。.dll.exe

当我使用 Visual Studio Publish 发布项目时,它会从该文件夹中删除 dll。

我已经尝试将其添加到 csproject 但仍然没有被复制

 <ItemGroup>
    <Content Include="assets\**\*">
        <CopyToOutputDirectory>Always</CopyToOutputDirectory>
        <CopyToPublishDirectory>Always</CopyToPublishDirectory>
    </Content>
</ItemGroup>

也尝试进行构建后复制事件,但这也不起作用

xcopy "$(ProjectDir)assets\*.*" "$(TargetDir)\assets" /Y /I /E 

文件夹结构 输出目录中的文件

左图包含文件夹的结构和解决方案具有的 dll,但是当发布发生时,我看不到已发布文件夹中的 dll。

如何将资产文件夹中的所有文件/文件夹复制到发布文件夹?

标签: visual-studioazure-functionsasp.net-core-3.1

解决方案


尝试使用您自己的 MSBuild 目标而不是构建后事件。

我们需要扩展的目标称为CopyAllFilesToSingleFolder. 这个目标有一个依赖属性,PipelinePreDeployCopyAllFilesToOneFolderDependsOn,我们可以利用它并注入我们自己的目标。因此,我们将创建一个名为 CustomCollectFiles 的目标并将其注入到进程中。我们通过以下方式实现这一点(请记住在 import 语句之后)。

<PropertyGroup>
  <CopyAllFilesToSingleFolderForPackageDependsOn>
    CustomCollectFiles;
    $(CopyAllFilesToSingleFolderForPackageDependsOn);
  </CopyAllFilesToSingleFolderForPackageDependsOn>
</PropertyGroup>
<Target Name="CustomCollectFiles">
  <ItemGroup>
    <_CustomFiles Include="..\Extra Files\**\*" />

    <FilesForPackagingFromProject  Include="%(_CustomFiles.Identity)">
      <DestinationRelativePath>Extra Files\%(RecursiveDir)%(Filename)%(Extension)</DestinationRelativePath>
    </FilesForPackagingFromProject>
  </ItemGroup>
</Target>

创建项目 _CustomFiles 并在 Include 属性中告诉它拾取该文件夹中的所有文件及其下的任何文件夹。然后我使用这个项目来填充 FilesForPackagingFromProject 项目。这是 MSDeploy 实际用于添加额外文件的项目。另请注意,我声明了元数据 DestinationRelativePath 值。这将确定它将被放置在包中的相对路径。我在这里使用了 Extra Files%(RecursiveDir)%(Filename)%(Extension) 语句。这就是说将它放在包中与 Extra Files 文件夹下相同的相对位置。

请参阅此SO 线程以获取更多信息。


推荐阅读