Visual Studio web.config 改造与咕噜

Visual Studio web.config transformation and grunt

我有一个 angular 网站使用 grunt 来改变一些环境配置设置。

我想要的是 web.config 中控制这些授予变量的应用程序设置。这样我就可以在推广到不同环境时使用 web.config 转换。

这是正确的做法吗?如果是这样,我将如何实施?如果不是,什么是更好的解决方案?

我使用Gulp,但同样的逻辑也适用。

首先,使用 Web Config Transforms 确实不是正确的方法,我什至不确定你是否可以在不编写 VS 扩展的情况下做到这一点。

G运行t 确实有一个环境变量插件 (https://github.com/jsoverson/grunt-env),它允许您访问 Node 环境变量。

通过这种方式,您可以在 g运行t 文件中放置一个对象,该文件具有包含每个状态值的子对象,例如

var settings = {
development: [
    { searchApi: 'http://dev.mysite' },
    { title: 'MySite (DEV)' }
],
qa: [
    { searchApi: 'http://qa.mysite' },
    { title: 'MySite (QA)' }
],
live: [
    {searchApi: 'https://www.mysite' },
    { title: 'MySite' }
]};

然后你循环相关的状态数组,然后搜索和替换。

然后您可以在 g运行t 文件 运行s 时手动切换值,或者您可以使用 MSBuild 并根据当前配置设置变量。 IIRC,G运行t 是同步的,因此它应该与 MSBuild 配合得很好。

编辑

在单独使用 Gulp/Grunt 和 MSBuild 一段时间后,我又回到了它并找到了解决方案。

首先,您需要一个.bat文件,其中包含以下代码(适用于Gulp):

set NODE_ENV=%1
gulp --gulpfile gulpfile.js

接下来,打开您的解决方案属性并在预构建中添加:

CD $(ProjectDir)
CALL deploy.bat $(ConfigurationName)

这将调用 .bat 文件,将当前配置作为参数传递,然后设置 NODE_ENV 值和 运行s gulp.

AFAICT,您必须批量执行此操作,因为在使用 MSBuild 的不同上下文中,顺序命令调用似乎 运行,因此您丢失了 NODE_ENV 值。

我怀疑您可以使用类似的方法将 MSBuild 也用于 运行 npm 和 bower,但那是另一天的实验!