我想让web.config转换在本地工作,但显然转换仅在进行部署时发生。
有谁知道一种运行msbuild目标“TransformWebConfig”的方法,而无需经过“重建”过程,也无需指定并输出将转换后的web.config吐出的目录?
编辑:使用赛义德的答案,我创建了一个.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上写了一篇详细的博客文章,但是这里是重点:
<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。
您提到的一件事是能够在运行应用程序时在本地进行转换。之所以我们只对包/发布执行转换,是因为如果我们转换了web.config本身,那么下次您调试应用程序时,web.config就会再次转换。因此,例如,如果您在web.debug.config中进行了转换以向config添加一个值,则在第一次添加该值时一切正常,但是在下次运行/调试您的应用程序时,它将再次添加。因此,最好避免这种情况。
关于asp.net - 使Web.config转换在本地工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3613714/