【发布时间】:2015-10-23 10:18:02
【问题描述】:
我正在尝试配置 Visual Studio Online 以将我的 ASPNET 5 应用程序持续部署到 Azure webapp,如 Team Foundation Build 文档中的本教程所述:https://msdn.microsoft.com/Library/vs/alm/Build/azure/deploy-aspnet5
我已按照所有步骤进行操作,一切正常。默认情况下,此脚本会部署针对完整 .Net 4.5.1 DNX 的应用构建,因此我决定尝试修改它以部署到 .Net Core。
构建脚本通过调用创建其部署包:msbuild.exe /t:Build,FileSystemPublish
在打开日志详细程度并阅读相关的 msbuild 文件后,我了解到以下内容:
“构建”目标最终使用 dnx.exe 来编译项目。因为 project.json 文件同时包含 dnx451 和 coreclr TFM,所以此步骤会为这两个框架生成构建输出 - 到目前为止一切都很好。
但是,FileSystemPublish 目标似乎只输出一个针对 .Net 4.5.1 运行时的 msdeploy 包。从日志中我可以看到执行 FileSystemPublish 目标最终会发出一个“dnu publish”命令,在我的情况下,将“dnx-clr-win-x86.1.0.0-beta6”作为 -runtime 参数传递。当我按照面包屑查找从哪里获取值“dnx-clr-win-x86.1.0.0-beta6”时,我最终在 Microsoft.DNX.Tasks.dll 中的“GetRuntimeToolingPath”任务中结束。此任务似乎在 global.json 中查找要使用的正确运行时,但奇怪的是在创建返回字符串之前在内部用“x86”和“clr”覆盖了这个值。
如果我的解释正确,似乎 FileSystemPublish 目标(在 Microsoft.DNX.Publishing.targets 中)本质上是(间接)硬连线以在生成其包输出时使用 x86、完整的 .Net 框架 DNX。在这一点上,我被困在如何让这个构建过程产生一个 .Net Core 包。
我的问题是,为什么 FileSystemPublish 会与 x86 完整的 .Net DNX 耦合,并且鉴于这种情况(除非我弄错了),为针对 .NET 的 ASPNET 5 应用程序生成 msdeploy 包的推荐方法是什么?网核?
编辑:
现在我有一个解决方法。我可以将/p:RuntimeToolingDirectory="C:\Users\buildguest\.dnx\runtimes\dnx-coreclr-win-x64.1.0.0-beta6" 作为参数传递给msbuild。
这会覆盖 GetRuntimeToolPath 中的默认逻辑并强制它使用 .Net Core。这行得通,但感觉就像是 hack,所以我将问题留待获得更好的答案。
【问题讨论】:
-
你有想过这个吗?
-
我目前仍在使用我在编辑中描述的解决方法。到目前为止,我还没有找到更好的方法。
标签: msbuild asp.net-core packaging msdeploy azure-devops