c# - .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 的双重修改?
解决方案
我想要的是一种检测发布(与构建)的方法,以避免两次修改 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"
。
推荐阅读
- build.gradle - Backendless.initapp 崩溃
- arkit - ARSession.run(_: options) 在调用后异步运行是什么意思?
- android - 设置带有数学主题的工具栏
- python - 在 Python 中创建列表列表时出现“NoneType”属性错误
- javascript - 从外部文件获取 Javascript 值
- javascript - Redux.js , Webpack.js , index.html - 我的 redux 渲染函数没有更新 index.html DOM
- javascript - TextTrackList onchange 事件在 IE 和 Edge 中不起作用
- javascript - nodejs 导出的变量在第二次命中时不可重用
- reactjs - 试图将值传递给处理程序但接收为未定义
- c++ - 在 GLSL 中优化光线追踪着色器