.NET Core包含发布文件夹

Mar*_*ark 11 .net c# visual-studio asp.net-core

我的.NET Core 2.1项目具有以下文件夹结构:

AppData发布解决方案时,如何包含文件夹及其所有子文件夹和文件?

我尝试将其添加到.csproj文件,但没有成功:

<ItemGroup>
    <Folder Include="AppData\*" />
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)

编辑

我也尝试过,但没有成功:

<ItemGroup>
    <Content Include="AppData\**" LinkBase="AppData" />
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)

Bar*_*rdr 19

添加:

<ItemGroup> 
  <Content Include="AppData\**"> 
    <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> 
  </Content> 
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)

如果文件不为空,.csproj则会复制到文件AppData夹。对于空AppData文件夹,您可以使用以下解决方法:

<Target Name="CreateAppDataFolder" AfterTargets="AfterPublish">
  <MakeDir Directories="$(PublishDir)AppData" Condition="!Exists('$(PublishDir)AppData')" /> 
</Target>
Run Code Online (Sandbox Code Playgroud)

AppData如果该文件夹尚未包含在输出中,则会在发布后创建该文件夹。这意味着AppData只有在发布时该文件夹为空,它才会创建文件夹。


小智 15

有一个简单而有用的解决方案:

  <ItemGroup>
    <Content Include="AppData\**" CopyToPublishDirectory="PreserveNewest"/>
  </ItemGroup>
Run Code Online (Sandbox Code Playgroud)

您可以在此处找到更多技巧:https : //docs.microsoft.com/en-us/dotnet/core/tools/project-json-to-csproj

  • 如果您想要指定一个文件夹来将文件放入发布目录中,您还可以将 LinkBase="MyDirectory" 添加到 &lt;Content&gt; 元素。 (4认同)

Jho*_*los 9

第一个解决方案,如果运行 dotnet build 或 dotnetpublish 将在 bin 内添加文件夹。

<ItemGroup>
  <None Update="AppData\**"  CopyToOutputDirectory="PreserveNewest"  />
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)

第二种解决方案,如果运行 dotnetpublish 将在 bin 内添加文件夹。

<ItemGroup>
  <Content Include="AppData\**" CopyToPublishDirectory="PreserveNewest"/>
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)


小智 6

上述解决方案都不适合我。因此,我采用了“React 项目模板”中采用的相同方法,并将以下代码添加到我的 .csproj 文件中:

  <Target Name="PublishFrontend" AfterTargets="ComputeFilesToPublish">
    <ItemGroup>
      <DistFiles Include="ClientApp\build\**" />
      <ResolvedFileToPublish Include="@(DistFiles->'%(FullPath)')" Exclude="@(ResolvedFileToPublish)">
        <RelativePath>%(DistFiles.Identity)</RelativePath>
        <CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
        <ExcludeFromSingleFile>true</ExcludeFromSingleFile>
      </ResolvedFileToPublish>
    </ItemGroup>
  </Target>
Run Code Online (Sandbox Code Playgroud)


小智 5

您可以在其中放置一个占位符文件(或使用您现有的文件)。然后将文件添加到项目并设置文件属性:复制到输出目录:如果更新则复制或始终复制。

其他方式:添加后构建步骤命令,创建目录。