我想让 web.config 转换在本地工作,但显然这些转换仅在进行部署时发生。
有谁知道一种方法来运行 msbuild 目标“TransformWebConfig”,而不需要经历“重建”过程,并指定和输出目录来吐出转换后的 web.config?
EDIT:使用 Sayed 的答案,我创建了一个.bat
文件来为我运行任务:
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Msbuild.exe "D:\Demo\Transformation.proj" /t:TransformWebConfig
copy /Y "D:\Demo\Web.config" "D:\MyProject\Web.config"
del ""D:\Demo\Web.config"
“Transformation.proj”是下面答案中 Sayed 代码片段的副本。只需指定转换的源、目标和目的地。新文件(在本例中为转换后的“web.config”)将位于“D:\Demo”目录中。我只是将其复制以覆盖项目的 web.config,最后删除“demo”文件夹中生成的文件。
另外,我创建了一个宏来运行这个批处理文件并为我执行转换:
Public Module DoTransform
Sub RunTransformBatchFile()
Try
Process.Start("D:\Demo\RunTransform.bat")
Catch ex As System.Exception
MsgBox(ex.Message)
End Try
End Sub
End Module
您还可以在工具栏上添加一个按钮来运行此批处理和/或分配一个快捷键来执行。
如果您想在不使用 Web 发布管道的情况下转换配置文件,那么您只需手动使用 TransformXml 任务即可。我已经在以下位置写了一篇详细的博客文章:http://sedodream.com/2010/04/26/ConfigTransformationsOutsideOfWebAppBuilds.aspx http://sedodream.com/2010/04/26/ConfigTransformationsOutsideOfWebAppBuilds.aspx,但重点是:
<Project ToolsVersion="4.0" DefaultTargets="Demo" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<UsingTask TaskName="TransformXml"
AssemblyFile="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.Tasks.dll"/>
<Target Name="Demo">
<TransformXml Source="app.config"
Transform="Transform.xml"
Destination="app.prod.config"/>
</Target>
</Project>
这里我使用transform.xml文件手动转换app.config文件,目标文件是app.prod.config。
您提到的一件事是能够在运行应用程序时在本地进行转换。我们只对 package/publish 执行转换的原因是,如果我们转换 web.config 本身,那么下次您调试应用程序时,web.config 会再次转换。因此,例如,如果在 web.debug.config 中您进行了向配置添加值的转换,则第一次添加时一切正常,但下次运行/调试应用程序时它将再次添加。所以最好避免这种情况。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)