在新的ASP.NET 5项目中,根据配置名称进行后构建事件。

7

我正在为三个智能电视编写一个统一的项目。我也创建了三个在Visual Studio中的配置。现在,我想根据所选配置执行一些CLI脚本。

问题在于,在新的ASP.NET 5项目中,我没有后期构建事件的编辑器。

我知道我必须在project.json中完成这项工作。我发现的是:

  "scripts": {
    "postbuild": ""
  }

但是使用这个,我不能针对不同的配置创建不同的CLI脚本。

我还发现:

  "configurations": {
  },

我猜这可能是我想要的,但是...怎么使用呢?Intellisense在这里没有作用,而且我在网上搜索也没有得到帮助...

[编辑]

也许我应该尝试使用.xproj文件?


你能否通过访问 ASPNET_ENV 环境变量来检查脚本中是否看到了配置? - poke
不幸的是未定义 :( - Nickon
2个回答

14

您需要构建一个主脚本,使用可用的上下文和环境变量来切换并运行您选择的其他脚本。

除了编译相关的变量列表在此处,您还可以获得这些与发布相关的脚本以及这些随处可用,以及由Environment.GetEnvironmentVariable返回的环境变量,可以在此处看到。

下面的图显示了来自VS2015 Update 3 RTM的智能感应,但它是误导性的,因为您根据使用的脚本块而获得其他感应:

enter image description here

因此,用于控制脚本中流程的完整上下文变量列表如下:

每个脚本块:

  • %project:Directory%
  • %project:Name%
  • %project:Version%

编译特定:

  • %compile:TargetFramework%
  • %compile:FullTargetFramework%
  • %compile:Configuration%
  • %compile:OutputFile%
  • %compile:OutputDir%
  • %compile:ResponseFile%
  • %compile:RuntimeOutputDir%(仅当存在运行时输出时可用)
  • %compile:RuntimeIdentifier%(仅当存在运行时输出时可用)
  • %comiple:CompilerExitCode%(仅在 postcompile 脚本块中可用)
  • 发布特定信息:

    • %publish:ProjectPath%
    • %publish:Configuration%
    • %publish:OutputPath%
    • %publish:TargetFramework%
    • %publish:FullTargetFramework%
    • %publish:Runtime%

5

我对此进行了一些调查,但并没有得到什么好的结果。

在脚本中暴露了一些项目变量。不幸的是,它们非常有限

  • %project:Name% 可以给你项目名称
  • %project:Directory% 可以给你项目目录
  • %project:Version% 可以给你项目版本

所以这里没有办法访问构建配置或环境。

project.json 中的 configurations 选项也只限于构建配置,并且只允许在那里声明编译选项,因此也无法使用。

不幸的是,似乎也没有其他解决方法。至少现在没有。我会考虑向 DNX 发送拉取请求,以添加一些其他项目变量,但目前来看,投资时间到 DNX 中并没有任何意义:毕竟它正在被 dotnet CLI 取代。我们将看到它是否会提供访问环境的功能,如果没有,我可能最终会提交拉取请求以添加此功能。但在我们到达那里之前,恐怕没有解决方案。


1
我还注意到 scripts > post/prebuild 不起作用。对我根本没有执行... - Nickon
它对我有效;你如何执行构建?如果你使用例如 dnu build,脚本应该被正确调用。 - poke
"scripts": { "postbuild": "echo 测试 测试 测试" } - Nickon
当我运行 dnu build 时,它对我有效。我得到了一个 “在 project.json / test test test 中执行脚本 'postbuild'” 的响应。 - poke

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接