要删除发布配置文件中的指定文件?

时间:2019-03-06 16:39:20

标签: visual-studio asp.net-core msbuild csproj

我有3个不同的设置文件与.NET Core 2.2应用程序一起使用
appsettings.json
appsettings.Development.json
appsettings.Test.json

我正在使用针对特定构建配置(例如测试)的发布配置文件,并且在我的发布配置文件中,我添加了此配置文件以尝试删除我不想部署的appsettings文件。将生产设置部署到开发服务器没有意义...

  <PropertyGroup>
    <ExcludeFilesFromDeployment>appsettings.json</ExcludeFilesFromDeployment>
    <ExcludeFilesFromDeployment>appsettings.Development.json</ExcludeFilesFromDeployment>
  </PropertyGroup>

但是,当我发布时,由于在Visual Studio中,所有3个文件都存在。如何指定其他2个文件在发布时被删除?

我也尝试将其放入csproj文件中,但是所有3个文件最终都被发布了

  <ItemGroup>
    <None Update="appsettings.json" CopyToPublishDirectory="Never" Condition=" '$(Configuration)' == 'Test' "/>
    <None Update="appsettings.Development.json" CopyToPublishDirectory="Never" Condition=" '$(Configuration)' == 'Test' "/>

    <None Update="appsettings.json" CopyToPublishDirectory="Never" Condition=" '$(Configuration)' == 'Release' "/>
    <None Update="appsettings.Test.json" CopyToPublishDirectory="Never" Condition=" '$(Configuration)' == 'Release' "/>

  </ItemGroup>

3 个答案:

答案 0 :(得分:0)

对此不是100%肯定,只是想一想,您是否尝试将其设置为仅在与预期的构建配置匹配时复制,例如

  <ItemGroup>
    <None Update="appsettings.json" CopyToPublishDirectory="PreserveNewest" Condition=" '$(Configuration)' == 'Production' "/>
    <None Update="appsettings.Development.json" CopyToPublishDirectory="PreserveNewest" Condition=" '$(Configuration)' == 'Development' "/>
    <None Update="appsettings.Test.json" CopyToPublishDirectory="PreserveNewest" Condition=" '$(Configuration)' == 'Test' "/>
  </ItemGroup>

还请检查您的.net核心版本不受https://github.com/dotnet/sdk/issues/881的影响

答案 1 :(得分:0)

不确定,但是将其放入您的.csproj文件中以检查是否有帮助。它可以在vs2017的.net核心中使用。

<ItemGroup Condition="'$(Configuration)' == 'Test'">
    <Content Remove="appsettings.Development.json" />
    <None Include="appsettings.Development.json" />
    <Content Remove="appsettings.json" />
    <None Include="appsettings.json" />
  </ItemGroup>

  <ItemGroup Condition="'$(Configuration)'=='Release'">
    <Content Remove="appsettings.Test.json" />
    <None Include="appsettings.Test.json" />
    <Content Remove="appsettings.json" />
    <None Include="appsettings.json" />
  </ItemGroup>

答案 2 :(得分:0)

通常,我为不同的部署(不同的机器)创建不同的构建配置,因此我将其他appsettings命名为构建配置名称。 所以我最终得到了这个小模式(在.csproj文件中)

<Choose>
  <When Condition="'$(Configuration)' == 'Debug'">
    <ItemGroup>
      <None Include="appsettings*.json" CopyToOutputDirectory="Always" CopyToPublishDirectory="Always" />
    </ItemGroup>
  </When>
  <Otherwise>
    <ItemGroup>
      <Content Remove="appsettings*.json" />

      <None Include="appsettings.json;appsettings.$(Configuration).json" CopyToOutputDirectory="Always" CopyToPublishDirectory="Always" />
    </ItemGroup>
  </Otherwise>
<Choose>