如何从项目中排除文件夹而不从发布中排除文件夹?

Eri*_*c B 12 msbuild asp.net-core visual-studio-2017

我已经将一个asp.net核心项目迁移到VS2017 RC,它现在支持从项目中排除文件的能力.我已经排除了两个文件夹,它们将这些行添加到我的csproj文件中:

<ItemGroup>
  <Content Remove="wwwroot\dist\**" />
  <Content Remove="wwwroot\lib\**" />
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)

这很好用,除了现在这些文件不再发布了.如何从项目中排除这些文件夹,但仍将它们包含在发布中?

Gon*_*ero 13

从dotnet新spa模板中获取的以下msbuild项目帮助我实现了我相信你所追求的目标:

<ItemGroup>
    <Content Remove="wwwroot\dist\**" />
    <Content Remove="wwwroot\lib\**" />
</ItemGroup>

<Target Name="GiveAName" AfterTargets="ComputeFilesToPublish">
    <!-- As part of publishing, ensure the JS resources are freshly built in production mode -->
    <Exec Command="npm install" />
    <Exec Command="npm etc etc do your stuff" />
    <Exec Command="or webpack" />

    <!-- Include the newly-built files in the publish output -->
    <ItemGroup>
        <DistFiles Include="wwwroot\dist\**; wwwroot\lib\**" />
        <ResolvedFileToPublish Include="@(DistFiles-&gt;'%(FullPath)')" Exclude="@(ResolvedFileToPublish)">
            <RelativePath>%(DistFiles.Identity)</RelativePath>
            <CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
        </ResolvedFileToPublish>
    </ItemGroup>
</Target>
Run Code Online (Sandbox Code Playgroud)


wei*_*eir 0

您也许可以通过Condition以下方式满足您的需求:

<ItemGroup Condition=" '$(Configuration)' == 'Debug' ">
  <Content Remove="wwwroot\dist\**" />
  <Content Remove="wwwroot\lib\**" />
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)

编辑:

或者也许尝试:

<ItemGroup>
  <Content Condition=" '$(Configuration)' == 'Debug'" Remove="wwwroot\dist\**" />
  <Content Condition=" '$(Configuration)' == 'Debug'" Remove="wwwroot\lib\**" />
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)

编辑2:

由于 IDE 看起来将遵循Condition,因此您可以将项目从 更改为ContentNone添加一个BeforePublish添加等效Content项目的目标。

编辑3:

所以具体来说,保留原来的

<ItemGroup>
  <Content Remove="wwwroot\dist\**" />
  <Content Remove="wwwroot\lib\**" />
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)

并在之前添加</Project>

<Target Name="BeforePublish">
  <ItemGroup>
    <Content Include="wwwroot\dist\**" />
    <Content Include="wwwroot\lib\**" />
  </ItemGroup>
</Target>
Run Code Online (Sandbox Code Playgroud)