msbuild - 如何为面向 .Net Core 的 ASP.Net 5 应用程序构建 MSDeploy 包

标签 msbuild asp.net-core packaging msdeploy azure-devops

我正在尝试配置 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/

相关文章:

python - 如何将原始 Python 包上传到 PyPI?

python - 打包 Python 库

python - 为 Debian 打包时如何访问原始 tarball?

visual-studio-2010 - 生成失败,错误 MSB3073,退出代码 9009

asp.net-core - IdentityServer4:为 Client_Credential Granttype 向客户端主体添加自定义默认声明

c# - 运行应用程序时,在 VSCode 中的 ASP.NET Core 应用程序中启动特定 URL

asp.net-core - 从 asp.net core 3.1 中的 app.settings.json 文件获取 ConnectionString 值

msbuild - 有没有办法让程序检测它是否被 MSBuild 调用?

msbuild - 为什么这个 Albacore msbuild 任务在 TeamCity 中失败?

build - 如何使用 TeamCity 从 JIRA 自动生成发行说明?