如何从发布中排除某些appsettings文件

23

我有一个ASP.NET Core 2应用程序。根据文档,我已经为我的开发环境创建了.pubxml文件。我使用Web部署(远程代理)将Web包部署到目标Web服务器。在我们安装了jenkins的构建服务器上,我运行以下命令进行构建和部署:

D:\Jenkins\myproject\workspace\myapplication\Src\Api>dotnet publish Api.csproj /p:PublishProfile=development.pubxml

它成功地构建和部署了应用程序到目标Web服务器。

然而,我的应用程序有多个针对每个环境的appsettings文件。例如appsettings.jsonappsettings.development.jsonappsettings.staging.jsonappsettings.production.json。部署过程会将所有的appsettings文件都部署到Web服务器上(在本例中是开发Web服务器)。

我该如何只包含特定于环境的appsettings文件?(在这种情况下,我想要部署appsettings.jsonappsettings.development.json但不包括其他两个文件)

2个回答

37
你可以将<ItemGroup>定义添加到发布配置文件(.pubxml文件)中,以便包含有关文件的更新语句。
例如,如果发布配置文件根据环境名称为Production.pubxml/Staging.pubxml,则可以将此项目组添加到根<Project> xml节点中:
<ItemGroup>
  <Content Update="appsettings.*.json" CopyToPublishDirectory="Never" />
  <Content Update="appsettings.$(MSBuildThisFileName).json" CopyToPublishDirectory="PreserveNewest" />
</ItemGroup>

2
对我很有效。我只是添加了<Content Update="appsettings.json" CopyToPublishDirectory="Never" />以忽略非特定环境文件。 - AFract

8
我可以使用以下的 *.pubxml 来处理这个问题:

<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
   .
   .
   .
  </PropertyGroup>
  <ItemGroup>
    <Content Update="appsettings.Development.json">
      <CopyToPublishDirectory>Never</CopyToPublishDirectory>
      <CopyToOutputDirectory>Never</CopyToOutputDirectory>
    </Content>
    <Content Update="appsettings.TestBed.json">
      <CopyToPublishDirectory>Never</CopyToPublishDirectory>
      <CopyToOutputDirectory>Never</CopyToOutputDirectory>
    </Content>
  </ItemGroup>
</Project>


这会在 csproj 文件上起作用吗? - aj go
不,它是使用 pubxml 扩展名发布文件。 - Mohammad Dayyan
很失望,但感谢提供信息。 - aj go
1
我在csproj文件中添加了<CopyToPublishDirectory>Never</CopyToPublishDirectory>,对我有用。使用“发布”时不再需要appsettings文件。谢谢! - Doug Knudsen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接