【问题标题】:Can different configurations manage files other than web.config in visual studio不同的配置可以在Visual Studio中管理除web.config之外的文件吗
【发布时间】:2014-06-08 07:57:30
【问题描述】:

我有一个项目需要为许多不同的客户进行测试和部署,而这些客户有时有不同的需求。 它是一个 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

【问题讨论】:

  • 您能否详细说明为什么需要不同的 js 文件开始?它们包含什么?与环境相关的配置设置通常位于 .config 文件中,该文件可以使用 Xml Transform 轻松转换。
  • 它们是客户端代码(javascript)的配置设置,我希望以结构化的方式拥有它们,这就是我使用 javascript 对象或 json 数据文件的原因。一个 .config 可能会这样做,但你如何将它转移到你的 javascript 变量中?
  • 我在问题中添加了更多信息。
  • 您是否考虑过不在 javascript 文件中使用配置,而是在 MVC 生成页面时构建这些客户特定的东西?这样,您可以保留客户端配置服务器端,但适当地生成页面。就个人而言,这就是我要做的,我觉得服务器端生成页面的目的之一是能够应用自定义行为,在你的情况下取决于用户/客户/等。
  • 我对此进行了很多思考,但是我有很多配置变量,而且很多都需要是 javascript 变量,因为这些变量被 javascript 库(如 highchart、knockout 等)使用。 .net 不允许在 .js 文件中使用 mvc 代码。

标签: visual-studio visual-studio-2012 configurationmanager


【解决方案1】:

您正在谈论的这个功能(在 web.config 的情况下)称为 Xml 转换。不幸的是,Visual Studio 只支持自动转换 web.config 文件,没有别的。

SlowCheetah 是为转换您选择的其他 xml 文件而创建的,但它仅适用于 Xml 文件。例如,您可以将其配置为在每次构建时转换文件(通过自定义 msbuild 任务)。

不过,我不知道任何转换 javascript 文件的解决方案。

编辑:

也许您可以构建自己的 HttpHandler 类来提供自定义的 js 文件?页面上js文件的链接会指向它,它会为每个客户提供不同的js文件,切换逻辑在服务器中。

我仍然觉得这是一个糟糕的解决方案(但我可能会因为 Web 表单而产生偏见),并且理想情况下您会生成已设置此信息的页面,即配置可以在 web.config 文件中例如,服务器端的控制器可以使用这些设置来个性化页面。

编辑 2:

好的。根据最后的 cmets,我现在了解到这是 static 配置,即它是特定于部署的,并且不会根据同一网站上的用户而改变。考虑到这一点,我觉得这不应该是构建过程的一部分,而是部署的一部分。

我会认真考虑使用部署工具来根据目标环境自定义文件。 Microsoft 自己的Release Management 可以使用内置的工作流活动相对轻松地实现这一目标。在发布管道中,您可以根据传递给工作流的任何参数选择所需的 javascript 文件。

【讨论】:

  • 最后一个是对与我已经尝试过的不同的原始问题的一个很好的解决方案。
  • @MaurizioIndenmark 如果您可以分享您如何准确地“切换”这些 js 文件,它也会有所帮助。例如,如果这些是永久性更改(对于您网站的给定部署,js 始终相同),我将完全避免使用代码逻辑来获取它们。选择适当的文件是部署脚本/进程的责任。另一方面,如果在同一个站点实例上,你需要根据用户选择不同的文件,那么你总是需要使用切换代码的​​路线。
  • 我尝试的解决方案在链接中的原始问题中。是通过预构建事件制作的
  • @MaurizioIndenmark 编辑了我的答案,请看一下。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-20
  • 2012-11-29
  • 2012-06-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多