我有一个带有三个web.config转换的asp.net应用程序。
我在想当我启动调试运行时(选择了调试模式的F5),Web.Debug.config中编写的转换将会应用..但是它不起作用..使用的Web.config是“Base”之一。
你会告诉我:“转型是不对的”..但它们是因为当我使用调试版本配置进行部署(右键单击/发布)时:
渲染的web.config有修改!所以它可以工作,但调试运行使用基础web.config ..我可以配置一个地方吗?
答案 0 :(得分:8)
编辑:在SO上可以找到更精确的方法: Use Visual Studio web.config transform for debugging
我曾评论说我也想要这个功能,但还没有办法做到这一点。然后决定快速谷歌。
讨论here引导我找到cmac3095提供的一种可能的解决方案:
我并没有那么多麻烦MSBUILD 但我的解决方案是添加一个自定义 目标是XXX.Web.csproj 转换然后添加自定义 “建设后”活动 调用MSBUILD的XXX.Web.csproj (执行转换)和 XCOPY复制转换后的 web.config超过原始版本。一边 效果是,因为我们有TFS,它 始终包含最后一个web.config 那被改造了,可以是一个 有点用尽(你一直在想 你的其他开发者有 覆盖你的设置 - 在... 从某种意义上说,他们有; - )....但是 当然,你的设置在 你使用的web.xxxxxx.config 转变。好的,足够的解释 这是你做的:复制和粘贴 这个进入XXXX.Web.csproj就好了 高于评论的“目标 Name =“BeforeBuild”元素......
<UsingTask TaskName="TransformXml"
AssemblyFile="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.Tasks.dll"
/> <Target Name="Transform">
<MakeDir Directories="obj\$(Configuration)"
Condition="!Exists('obj\$(Configuration)')"
/>
<TransformXml Source="Web.Config" Transform="Web.$(Configuration).config"
Destination="obj\$(Configuration)\Web.config"
StackTrace="true" /> </Target>
<Target Name="AfterBuild">
</Target>
就是这样。在下一个构建 你的xxx.web.config,post build 将运行自定义目标和 生成转换后的web.config。该 XCOPY将覆盖现有的。