VS将生成(并覆盖)web.config文件,作为发布到IIS的一部分。我需要在文件中包含各种项目(例如扩展文件上传最大大小限制,重定向到HTTPS等)。我目前不得不在每次发布后将内容复制并粘贴到文件中。
有没有办法定义Visual Studio在为IIS发布.NET Core 2 Web应用程序时生成的web.config文件的内容?
答案 0 :(得分:7)
不确定您是否解决了这个问题,但是如果其他任何人遇到此问题,我都会遇到这个问题,最后去寻找转换任务的源代码。它包含一些日志记录,因此我运行了dotnet publish
和一个/v:n
参数,该参数将日志记录的详细程度设置为“正常”:
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文件中“项目”节点上的Sdk="Microsoft.NET.Sdk.Web"
属性,否则它甚至都不会寻找Web.configs。
供参考,这是任务源代码: https://github.com/aspnet/websdk/blob/master/src/Publish/Microsoft.NET.Sdk.Publish.Tasks/Tasks/TransformWebConfig.cs
答案 1 :(得分:3)
我终于回到这个话题,并使用了一个转换:
在项目的根目录中创建一个web.release.config文件
将该文件的属性设置为Build Action = None,这样就不会将其直接复制到目标文件夹中
使用转换语法来定义需要插入的部分:
<?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>