使用 WebDeploy 将网站部署到 IIS ASP.NET 时,我只能创建 appsettings。Production.json如果它不存在?

When using WebDeploy to deploy ASP.NET website to IIS, can I only create appsettings.Production.json if it does not exist?

提问人:Luke Vo 提问时间:10/25/2023 更新时间:10/25/2023 访问量:59

问:

我的项目包含两个文件和一个默认文件。但是,管理员可以在服务器上手动编辑生产文件,如果我再次发布它,它就会被覆盖。appsettings.jsonappsettings.Production.json

如果此文件已存在,我是否可以以某种方式指定此文件不被覆盖?

请注意,这个问题不起作用,因为显然它不适用于 Web 部署(IIS 发布),我希望它不覆盖,即使项目中的文件较新(即管理员在我们修改它之前编辑它在代码中)。CopyToPublishDirectory="PreserveNewest"

.NET ASP.NET-CORE IIS WEBDEPLOY

评论

0赞 Nick Abbot 10/25/2023
这可行吗?右键单击 --> 从项目中排除
0赞 Luke Vo 10/25/2023
@NickAbbot我没有测试,但 IFAIK 该文件永远不会发布,因为我以前曾将其用于本地 SQLite 数据库文件。
0赞 Tawab Wakil 10/25/2023
有时你会希望它被覆盖,不是吗?就像您作为开发人员在本地对文件进行更改并希望将其应用于生产环境一样。有鉴于此,如果文件已经在源代码管理系统中维护,那么作为文件的单一事实来源可能是自然的选择。然后,管理员只需要在服务器上更改它时提醒您。
0赞 Luke Vo 10/25/2023
@TawabWakil我们的一些项目也是如此。有些是共享的(即将单个源代码部署到多个不同的网站),区别在于 appsettings。
0赞 Nick Abbot 10/25/2023
您的问题是:如果此类文件已存在,我是否可以以某种方式仅指定此文件不被覆盖?因此,只需部署一次,然后从项目中排除

答:

1赞 YurongDai 10/25/2023 #1

在生成 Web 包时,可以通过在与 Web 应用程序项目文件相同的文件夹中创建自定义文件来排除特定文件或文件夹。.wpp.targets

  1. 在与项目文件相同的文件夹中创建名为 [project name].wpp.targets 的自定义项目文件。

  2. 在 .wpp.targets 文件中,添加一个 ItemGroup 元素。

  3. 在 ItemGroup 元素中,添加 ExcludeFromPackageFolders 和 ExcludeFromPackageFiles 项,以根据需要排除特定文件和文件夹。

以下是此文件的基本结构:.wpp.targets

<Project ToolsVersion="4.0" 
         xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <ItemGroup>   
    <ExcludeFromPackageFolders Include="[semi-colon-separated folder list]">
      <FromTarget>[arbitrary metadata value]</FromTarget>
    </ExcludeFromPackageFolders>
    <ExcludeFromPackageFiles Include="[semi-colon-separated file list]">
      <FromTarget>[arbitrary metadata value]</FromTarget>
    </ExcludeFromPackageFiles>
  </ItemGroup>
</Project>

然后,需要将该文件添加到 Web 应用程序项目,并使用此文件排除 appsettings.json 和 appsettings。生成项目时从 Web 包Production.json。.wpp.targets

有关详细信息,请参阅此文档:从部署中排除文件和文件夹

评论

0赞 Luke Vo 10/26/2023
嗨,如果我没看错的话,这个文件与整个构建过程相关联,而不是与每个发布配置文件相关联,对吧?这意味着所有部署要么都有该文件?
0赞 YurongDai 10/26/2023
是的,.wpp.targets 文件与整个生成过程相关,并不特定于单个发布配置文件。在 Web 应用程序项目中创建并包含 .wpp.targets 文件时,该文件中指定的排除项将应用于项目的所有部署和发布操作。因此,如果要对不同的发布配置文件使用不同的排除项,则需要根据要求在 .wpp.targets 文件本身中管理这些排除项。此文件将成为项目配置的一部分,并将应用于所有部署,除非您对其进行修改。