我正在尝试配置 Visual Studio Online 以将我的 ASPNET 5 应用程序持续部署到 Azure web 应用程序,如 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 文件后,我了解到以下内容:
“Build”目标最终使用 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 full .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。这有效,但感觉像是一个黑客,所以我将问题悬而未决以获得更好的答案。
最佳答案
要发布 Core CLR,您可以将 msbuild 参数“PublishDNXVersion”作为 dnx-coreclr-win-x64.1.0.0-beta6 传递。msbuild <project>.xproj /p:deployOnBuild=true;PublishDNXVersion=dnx-coreclr-win-x64.1.0.0-beta6
关于msbuild - 如何为面向 .Net Core 的 ASP.Net 5 应用程序构建 MSDeploy 包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31751191/