首页 > 解决方案 > .NET Core csproj PublishProfileName 在构建时有一个值

问题描述

我正在使用以下示例动态生成Web.config文件:

https://sebnilsson.com/blog/asp-net-transform-web-config-with-debug-release-on-build/

更改包括在常规 .NET 中工作的 .csproj 中:

<Target Name="BeforeBuild" Condition="'$(PublishProfileName)' == '' And '$(WebPublishProfileFile)' == ''">

但是,当在 .NET Core 中使用类似的行时,它不起作用,因为PublishProfileName它实际上是“文件系统”。我想要的是一种检测发布(与构建)的方法,以避免两次修改 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 的双重修改?

标签: c#asp.netvisual-studioasp.net-coremsbuild

解决方案


我想要的是一种检测发布(与构建)的方法,以避免两次修改 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"


推荐阅读