我正在使用以下示例动态生成Web.config
文件:
https://sebnilsson.com/blog/asp-net-transform-web-config-with-debug-release-on-build/
更改包含在.csproj中,此更改在常规.NET中有效:
<Target Name="BeforeBuild" Condition="'$(PublishProfileName)' == '' And '$(WebPublishProfileFile)' == ''">
但是,在.NET Core中使用类似的行时,该行不起作用,因为PublishProfileName
实际上是'FileSystem'。我想要的是一种检测发布(相对于构建)的方法,以避免两次修改Web.config的问题。这是.NET Core的修改部分:
<Target Name="TestTarget" AfterTargets="Build">
<Message Importance="High" Text="Firing on publish due to PublishProfile being '$(PublishProfileName)'" />
<TransformXml Source="Web.Base.config" Transform="Web.$(Configuration).config" Destination="Web.config" />
</Target>
有人知道如何在.NET核心中做与在.NET中做的相同的事情,以阻止动态生成时对web.config的双重修改吗?
答案 0 :(得分:1)
我想要的是一种检测发布(相对于构建)以避免问题的方法 两次修改Web.config。
我认为最简单的方法是在目标中使用Condition="'$(DeployOnBuild)' != 'true'"
。
然后,该目标将仅在构建过程中执行,而不会在发布过程中执行。
<Target Name="TestTarget" Condition="'$(DeployOnBuild)' != 'true'" AfterTargets="Build">
<Message Importance="High" Text="Firing on publish due to PublishProfile being '$(PublishProfileName)' and " />
<!--<TransformXml Source="Web.Base.config" Transform="Web.$(Configuration).config" Destination="Web.config" />-->
</Target>
这将确保当您通过FileSystem在VS中发布项目时,它仅执行目标once in build
而不是twice in build and publish
。我不确定您为什么设置AfterTargets="Build"
,根据上面提到的文章,可能是BeforeTargets="Build"
。