生成时,.NET Core csproj PublishProfileName具有一个值

时间:2019-06-26 20:08:21

标签: c# asp.net visual-studio asp.net-core msbuild

我正在使用以下示例动态生成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的双重修改吗?

1 个答案:

答案 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"