BizTalk Server 应用程序项目无法使用 .NET 4.7.2 进行编译

BizTalk Server Application Project fails to compile with .NET 4.7.2

在我新创建的 BizTalk 2020 开发环境中,当我将 BizTalk Server 应用程序项目 (.btaproj) 添加到解决方案时,设置项目名称的对话框 window 显示 . NET 框架选择器,它默认为预期的版本 4.7.2。

但是,当项目添加到解决方案时,我可以在项目的属性中看到它以 .NET 4.6.1 为目标。有人见过这个吗?是错误还是安装有问题?

自然地,我将它更改为版本 4.7.2 作为常规 BizTalk 项目,并且在 Visual Studio.

中一切都可以正常编译

但是在我们的构建服务器上,同一个项目失败了。我们将 Azure Devops 用于 CICD.On 构建服务器,我们安装了相同版本的 VS(2019 企业版)和 BizTalk Server 扩展(v3.12.1.0)以及 BizTalk 服务器安装中的 msbuild 工具。

在日志中,我首先收到警告:

C:\Program Files (x86)\Microsoft Visual Studio19\Enterprise\MSBuild\Current\Bin\Microsoft.Common.CurrentVersion.targets(2106,5): warning MSB3274: The primary reference "A.dll" could not be resolved because it was built against the ".NETFramework,Version=v4.7.2" framework. This is a higher version than the currently targeted framework ".NETFramework,Version=v4.6.1". [B.btaproj]*

在日志的更下方,btaproj 将找不到要包含在 .zip 包中的程序集。

上面的消息暗示我有不同的目标版本,但我没有。

现在奇怪的是,我可以登录到构建服务器并克隆相同的项目,然后用 VS 编译它就好了。

使构建服务器成功编译项目(或任何其他带有 .btaproj 的 BizTalk 项目)的唯一方法是将 .NET 更改为 4.6.1(对于 .btproj 和 .btaproj)并且它所有编译都很好并部署到 BizTalk 环境。

我已经检查了项目文件和签入到 Git 的文件,源文件似乎一切正常。我设置的清洁标志用于清洁源和输出目录。我可以在构建服务器上使用 4.7.2 编译常规 BizTalk 项目和 .NET 应用程序就好了,只有当我涉及一个 .btaproj 项目时,它才会开始出现问题。

谁能指出从哪里开始看? .btaproj 一开始似乎很可疑,但它也可以与构建服务器上的 msbuild 隔离,并且不同于使用 Visual Studio.

进行编译

作为解决方法,您可以在 MSBuild 任务的 MSBuild Arguments 列中指定 /p:TargetFrameworkVersion=v4.7.2

MSBuild 允许您使用 -属性(或 -p)开关在命令行上设置属性。这些全局 属性 值会覆盖项目文件中设置的 属性 值。这包括环境属性,但不包括无法更改的保留属性。

详情请参考此document

由于 BizTalk Server 应用程序项目(例如 .btaproj)在添加到解决方案时默认为目标框架名字对象 4.6.1,因此您需要手动更改版本以进行调试和发布。

不要被默认为 4.7.2 版的创建项目对话框误导