在.NET MVC3.0应用程序中,我在appSettings
中有以下配置
web.config
<appSettings>
<add key="SMTPHost" value="mail.domain.com"/>
<add key="SMTPUsername" value="user@gmail.com"/>
<add key="SMTPPort" value="25"/>
<add key="SMTPPwd" value="mypassword"/>
<add key="EmailFrom" value="notific@gmail.com"/>
</appSettings>
为了进行调试,我定义了以下配置转换:
web.Debug.config
<appSettings>
<add key="SMTPPort" value="58" xdt:Transform="Replace" xdt:Locator="Match(key)" />
</appSettings>
我在调试模式下运行应用程序,但是我的SMTP端口仍然从web.config
而不是web.Debug.config
获取值。
有没有人能建议一下这个配置中可能出了什么问题?
发布于 2012-01-13 03:28:04
Web.config转换仅作为发布操作的一部分应用。
如果您希望这作为app.config
构建操作的一部分来完成,那么您可以使用SlowCheetah - XML Transforms Visual Studio插件:
http://visualstudiogallery.msdn.microsoft.com/69023d00-a4f9-4a34-a6cd-7e854ba318b5
发布于 2019-06-01 05:20:23
对于VS 2017,我找到了答案here,不确定为什么上面没有人引用它,因为它似乎是一个非常受欢迎的解决方案。也很简单。确保你在Mar5 2019上看到来自IOrlandoni的评论,让它在VS 2017和所有版本中工作。
基本上它是两步走的。首先,编辑.csproj文件,附加以下代码。其次,创建一个新的web.base.config配置并将现有的web.config复制到其中。这样做之后,任何构建都会用您想要的转换覆盖您的web.config。
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\WebApplications\Microsoft.WebApplication.targets" />
<Target Name="BeforeBuild">
<TransformXml Source="Web.Base.config"
Transform="Web.$(Configuration).config" Destination="Web.config" />
</Target>
发布于 2017-06-01 16:39:08
你直接的问题已经回答了--解释是转换是在发布时应用的,而不是在构建时应用的。
然而,我认为它并没有提供如何实现你想要做的事情的解决方案。
我已经在这个问题上挣扎了几天了,正在寻找一种方法来保持web.config的整洁,并在相应的转换文件中设置根据环境而变化的所有关键点。我的结论是,最简单和最稳定的解决方案是在原始web.config中使用调试值,这样当您在Visual Studio中进行调试运行时,它们总是存在的。
然后为您想要发布到的不同环境创建转换-测试、集成、生产-无论您拥有什么。现在内置的在发布时转换web.config文件的功能就足够了。不需要SlowCheetah或编辑构建事件或项目文件。如果你只有web项目,那就是。
如果您愿意,您也可以在解决方案中包含web.debug.config文件,以便保留一个单独的文件,其中包含与开发环境相关的所有值。但是,一定要在其中注明在Visual Studio中运行时不会应用这些值,以防其他人试图将其用于该目的!
https://stackoverflow.com/questions/8841075
复制相似问题