【问题标题】:How to define custom web.config in .Net Core 2 for IIS publish?如何在 .Net Core 2 中为 IIS 发布定义自定义 web.config?
【发布时间】:2018-10-17 18:54:18
【问题描述】:

VS 将生成(并覆盖)一个 web.config 文件,作为发布到 IIS 的一部分。我需要在文件中包含各种项目(例如扩展文件上传最大大小限制、重定向到 HTTPS 等)。我目前必须在每次发布后将内容复制并粘贴到文件中。

有没有办法定义 Visual Studio 在为 IIS 发布 .NET Core 2 Web 应用程序时生成的 web.config 文件的内容?

【问题讨论】:

  • 将 ˋweb.config` 添加到您的项目中。
  • @Lex Li 如果我试过了。即使使用 Build Action = Content,VS 也不会发布它。或者它可能会然后覆盖它。
  • 至少dotnet publish 不会覆盖它。在这里发布 Web 应用程序不是必须使用 VS。
  • @Lex Li 我想这是一个选项,但我在 VS 中使用发布到 IIS,所以我不必手动复制文件。我想知道是否有办法使用 VS Publish。

标签: iis visual-studio-2017 asp.net-core-2.0


【解决方案1】:

不确定你是否解决了这个问题,但如果其他人遇到这个问题,我遇到了这个问题,最后去寻找转换任务的源代码。它包含一些日志记录,因此我使用/v:n 参数运行dotnet publish,它将日志记录详细程度设置为“正常”:

dotnet publish src\MyProject -o ..\..\publish /v:n

当我运行这个时,我在输出中看到了这个:

_TransformWebConfig:
  No web.config found. Creating 'C:\Development\MyProject\publish\web.config'

即使项目中有 web.config。我将 web.config “复制到输出目录” 的属性更改为 “始终”,现在我的项目中的 web.config 与自动生成的合并内容。

我的 csproj 现在有这个了:

    <None Include="web.config">
        <CopyToOutputDirectory>Always</CopyToOutputDirectory>
    </None>

并且发布输出有:

_TransformWebConfig:
  Updating web.config at 'C:\Development\MyProject\publish\web.config'

注意:如果您要发布到已包含 web.config 的现有目录,它将更新该文件。 (即旧的发布)。如果您不指定输出目录,它将发布到类似/bin/Debug/net471/publish/ 的位置,其中可能包含旧文件。

注意 2:您仍然需要 csproj 文件中 Project 节点上的 Sdk="Microsoft.NET.Sdk.Web" 属性,否则它甚至不会费心寻找 Web.configs。

供参考,这里是任务源代码: https://github.com/aspnet/websdk/blob/master/src/Publish/Microsoft.NET.Sdk.Publish.Tasks/Tasks/TransformWebConfig.cs

【讨论】:

  • 要在VS2019中轻松编辑csproj文件,右键项目名称,然后点击“编辑项目文件”。然后在 块中查找 web.config 条目。
【解决方案2】:

我终于回到了这一点并使用了一个变换:

  1. 在项目根目录下创建 web.release.config 文件

  2. 将该文件的属性设置为 Build Action = None,这样它就不会直接复制到目标文件夹

  3. 使用转换语法定义需要插入的部分:

<?xml version="1.0" encoding="utf-8"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
  <location>
    <system.webServer>
      <security xdt:Transform="Insert">
        <requestFiltering>
          <requestLimits maxAllowedContentLength="209715200" />
        </requestFiltering>
      </security>
      <rewrite xdt:Transform="Insert">
        <rules>
          <rule name="HTTP/S to HTTPS Redirect" enabled="true" stopProcessing="true">
            <match url="(.*)" />
            <conditions logicalGrouping="MatchAny">
              <add input="{SERVER_PORT_SECURE}" pattern="^0$" />
            </conditions>
            <action type="Redirect" url="https://{HTTP_HOST}{REQUEST_URI}" redirectType="Permanent" />
          </rule>
        </rules>
      </rewrite>
      <modules xdt:Transform="Insert" runAllManagedModulesForAllRequests="false">
        <remove name="WebDAVModule" />
      </modules>
    </system.webServer>
  </location>
</configuration>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-25
    • 2019-07-12
    • 2010-11-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多