Msbuild web.config转换在生成服务器上不起作用
我们正在建立与TeamCity的持续集成,在签入的基础上进行构建。这很好,但是它总是使用默认的web.config构建,而不是使用特定于开发环境的web配置进行转换。 在VisualStudio中,我为开发创建了自定义构建配置。当我选择了Msbuild web.config转换在生成服务器上不起作用,msbuild,web-config,teamcity,Msbuild,Web Config,Teamcity,我们正在建立与TeamCity的持续集成,在签入的基础上进行构建。这很好,但是它总是使用默认的web.config构建,而不是使用特定于开发环境的web配置进行转换。 在VisualStudio中,我为开发创建了自定义构建配置。当我选择了development配置在本地发布时,web.development.config会正确转换,但在构建服务器上不会发生这种情况。 在TeamCity中,作为msbuild步骤的一部分,我创建了一个构建参数sys.configuration,并将developm
development
配置在本地发布时,web.development.config
会正确转换,但在构建服务器上不会发生这种情况。
在TeamCity中,作为msbuild步骤的一部分,我创建了一个构建参数sys.configuration
,并将development
作为值传递。但是当它运行时,生成的web.config不会与开发设置一起转换。我还尝试将命令行参数设置为/p:configuration=development
,但没有成功
任何帮助都将不胜感激。我认为,要在使用MSBuild而不是Visual Studio发布时进行配置转换,您需要向项目中添加TransformXml任务 提供有关需要添加的内容的指南,但要保存单击,请执行以下操作:
您可能需要更改.targets文件的路径,以符合生成服务器上安装的任何版本。要正确生成转换,需要满足多个条件 Inside.csproj确保您具备以下所有功能:
<Project> ...
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v$(VisualStudioVersion)\Web\Microsoft.Web.Publishing.targets" />
<Target Name="SetTransformAppConfigDestination" BeforeTargets="PrepareForBuild" Condition="exists('Web.$(Configuration).config')">
<PropertyGroup>
<!-- Force build process to use the transformed configuration file from now on. -->
<AppConfig>$(IntermediateOutputPath)$(TargetFileName).config</AppConfig>
</PropertyGroup>
<Message Text="AppConfig transformation destination: = $(AppConfig)" />
</Target>
<Target Name="TransformAppConfig" AfterTargets="PrepareForBuild" Condition="exists('Web.$(Configuration).config')">
<TransformXml Source="Web.config" Transform="Web.$(Configuration).config" Destination="$(AppConfig)" />
</Target>
</Project>
。。。
然后确保在属性->构建中正确设置了路径
然后为要转换的每个节点添加web.release.config标记
xmlns:xdt=”http://schemas.microsoft.com/XML-Document-Transform"
xdt:Transform=“Replace”
看起来像这样:
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
<appSettings xdt:Transform="Replace">
<add key="VariableToBeTransformed" value="ValueToInsert"/>
</appSettings>
<system.web>
<compilation xdt:Transform="RemoveAttributes(debug)" />
</system.web>
</configuration>
希望这对大家都有帮助,您可以对app.config执行同样的操作。我们一直在web应用程序项目中使用发布目标,并且已经看到构建过程正确地转换了我们的web.config文件,但是当我们将构建移动到CI服务器时,没有应用转换
使用的MSBuild脚本为:
MSBuild.exe路径\u到\u PROJ.csproj/p:DeployOnBuild=true/p:PublishProfile=PUBLISH\u目标
我们发现,我们仍然需要将配置指定为Debug或Release(即使这似乎是发布目标的一个属性)
MSBuild.exe路径\u TO_PROJ.csproj/p:DeployOnBuild=true/p:PublishProfile=PUBLISH\u TARGET/p:Configuration=Release
如果使用Visual Studio 2019(本例中为社区版),则最新MSBuild.exe的路径如下所示:
“C:\Program Files(x86)\Microsoft Visual Studio\2019\Community\MSBuild\Current\Bin\MSBuild.exe”
您可以通过以下方式创建MStrong textbuild脚本:
"C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Current\Bin\MSBuild.exe" MyProject.csproj /p:DeployOnBuild=true /p:PublishProfile=Release /p:VisualStudioVersion=16.0
其中参数DeployOnBuild在生成后触发多个目标,其中有一个目标转换web.config Visual studio中的Publish
函数正在项目中使用PublishProfiles/foo.pubxml
来确定您的配置,而MSBuild
则在project.sln
中确定您的配置
您需要从解决方案资源管理器→ 选择活动解决方案配置
→ 更改项目上下文下的配置
这对我来说很有效!谢谢你的帮助。我所做的就是卸载我的项目,并将上述代码复制到我的项目文件中。注意:默认情况下,“BeforeBuild”会被注释。此解决方案将更改原始的web.config,因此当您尝试在VS中构建项目时,它会要求您每次都覆盖web.config。在我看来,这是不可接受的。奇怪的是,添加/p:Configuration=Release
是有效的,即使我的发布配置文件也设置为这样!谢谢追加/p:Configuration=MyConfig适合我!谢谢
"C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Current\Bin\MSBuild.exe" MyProject.csproj /p:DeployOnBuild=true /p:PublishProfile=Release /p:VisualStudioVersion=16.0