2017-08-11 66 views
0

我有一个针对.NET Framework 4.7的旧ASP.Net应用程序。这个应用程序是一个为期五年的开发练习,非常成熟。它有相当多的支持库项目都在同一个解决方案中。有三个用于数据库通信的EF6项目。如何在VSTS中只包含一个构建步骤来打包混合项目解决方案?

我们已经开始转向.NET Core,并且已经添加了一个新的.NET Core Web项目,目标是.NET Framework 4.7,因此我们可以在迁移时使用EF6项目。这一切都很好。

我们的源代码托管在VSTS中,我们在我们的域中使用远程构建服务器而不是Azure构建服务器。我可以成功构建没有MSBuild参数的解决方案。但是生成部署包所需的MSBuild参数与传统的ASP.Net应用程序和ASP.Net Core应用程序不同。所以我创建了两个解决方案,一个是遗留项目和所有库项目,而不是ASP.Net Core项目。另一个是ASP.Net Core项目和所有库项目,但不包括传统的ASP.Net项目。我还有两个构建步骤,每个解决方案都包含每个Web项目构建部署包所需的MSBuild参数。

我想知道是否有人知道如何更改此设置,以便我只在主解决方案上有一个构建步骤。是否有任何VSTS任务会从构建中获取输出并创建我需要的部署包?我需要对传统的ASP.Net项目进行web.config转换,但.NET Core不支持这种转换,所以我认为这是挂起的原因。我知道有一种方法可以创建一个使用DSC和PowerShell来打包和部署所有内容的Azure部署解决方案,但这对我来说似乎有点矫枉过正。我在下面包含了两个MSBuild设置。

传统ASP.Net的MSBuild参数:

/P:DeployOnBuild = TRUE/P:WebPublishMethod =封装/ P:PackageAsSingleFile = TRUE/P:SkipInvalidConfigurations = TRUE/P:PackageLocation =“$(建.artifactstagingdirectory)\应用”/p:AutoParameterizationWebConfigConnectionStrings =假

ASP.Net核心的MSBuild参数:

/p:DeployOnBuild =真/ p:WebPublishMethod =吃豆卡格/ P:PackageAsSingleFile = TRUE/P:SkipInvalidConfigurations =真/p:DesktopBuildPackageLocation="$(build.artifactstagingdirectory)\RSD.zip”/P:DeployIisAppPath = “默认Web站点”

+1

您不能拥有“.NET Core Web项目以.NET Framework 4.7为目标”。你的意思是ASP.NET Core? – mason

+0

我能想到的唯一解决方案使得它更加“复杂”,因为添加了一个定制的MSBuild项目文件,该文件负责CI流程,但允许在每个分支基础上配置正确的设置,因此您不需要每次更改应用程序结构时都必须重新配置CI。这对你来说是一种选择吗? (类似于[CI脚本](https://gist.github.com/dasMulli/69f5303aa79a8cd4060e44891c90fd2d)) –

+0

我确实是指ASP.Net Core。对不起,我在大多数地方说过ASP.Net Core,但在我的一个引用中忽略了“ASP”。 – Brian

回答

0

您可以创建发布为每个具有相同名称的项目配置文件,然后通过指定/p:DeployOnBuild=true /p:PublishProfile=[profile name]来部署具有该配置文件的项目。

请注意,您需要指定发布配置文件中包位置的相对路径。 (例如.... \ a \ Web1.zip)

+0

这听起来很有希望。我会给它一个镜头,并检查结果。 – Brian

+0

@Brian感觉在这里发布结果。 –

+0

啊,我误解了你在说什么。这仍然需要执行两个独立的构建。我想在包含所有项目的sln上执行一个构建(asp.net v4和asp.net核心v2.0,目标是net47)。从一个构建中获取结果并将asp.net v4项目部署到一个网站,并将asp.net core 2.0项目的结果部署到一个单独的网站。 – Brian

相关问题