我有一个项目需要针对许多不同的客户进行测试和部署,而这些客户有时会有不同的需求。 它是一个MVVC应用程序,我使用.net MVC,但只有少数部分和部分,像一些部分视图等等,其他一切都是使用knockout.js的单页面应用程序。
所以我有不同的web.config文件,但我有一个包含客户端配置的文件,一个.js文件,对每个客户都不同。
现在,如果使用配置管理器在visual studio中进行不同的配置,我会根据我选择的配置获得不同的web.config,这是完美的。
但是有没有办法让项目中的另一个文件获得相同的结果?
例如有一个myfile.nightly.js和myfile.debug.js等等。 (这些文件包含配置设置,如页面颜色或徽标或要隐藏的部分,适用于每个不同的客户)。
我尝试使用预建事件此解决方案:http://www.hanselman.com/blog/ManagingMultipleConfigurationFileEnvironmentsWithPreBuildEvents.aspx
但这是一个非常有用的帖子,我想知道VS2012是否有更实际的内容,例如
答案 0 :(得分:3)
您正在谈论的此功能(在web.config的情况下)称为Xml Transform。不幸的是,Visual Studio只支持自动转换web.config文件而不支持任何其他内容。
创建SlowCheetah是为了转换您选择的其他xml文件,但它仅适用于Xml文件。例如,您可以将其配置为转换每个构建上的文件(通过自定义msbuild任务)。
我不知道有任何转换javascript文件的解决方案。
编辑:
<击>
也许您可以构建自己的HttpHandler
类来提供自定义的js文件?页面上js文件的链接指向它,它将为每个客户提供不同的js文件,并且切换逻辑将在服务器中。
我仍然认为这是一个糟糕的解决方案(但我可能因为Web窗体而有偏见),理想情况下,您将生成已设置此信息的页面,即配置可能例如,在web.config文件中,服务器端的控制器可以使用这些设置来个性化页面。
击>
编辑2:
确定。基于最后的评论,我现在理解这是静态配置,即,它是特定于部署的,并且例如不基于同一网站上的用户而改变。考虑到这一点,我觉得这不应该是构建过程的一部分,而是部署过程。
我会认真考虑使用部署工具根据目标环境自定义文件。微软自己的Release Management可以使用内置的工作流活动相对轻松地实现这一目标。在发布管道中,您可以根据传递给工作流的任何参数选择所需的javascript文件。