【发布时间】:2018-01-20 10:24:51
【问题描述】:
我有一个针对 .NET Framework 4.7 的旧 ASP.Net 应用程序。这个应用程序已经进行了五年的开发工作,并且非常成熟。它在同一个解决方案中拥有相当多的支持库项目。数据库通信共有三个 EF6 项目。
我们已开始迁移到 .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=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:PackageLocation="$(build.artifactstagingdirectory)\App" /p:AutoParameterizationWebConfigConnectionStrings=False
ASP.Net Core MSBuild 参数:
/p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:DesktopBuildPackageLocation="$(build.artifactstagingdirectory)\RSD.zip" /p:DeployIisAppPath="默认网站”
【问题讨论】:
-
您不能拥有“面向 .NET Framework 4.7 的 .NET Core Web 项目”。你是说 ASP.NET Core 吗?
-
我能想到的唯一解决方案使它更加“复杂”,例如添加一个负责 CI 过程的自定义 MSBuild 项目文件,但允许在每个用户上配置正确的设置分支基础,因此您不必在每次更改应用程序结构时重新配置 CI。这对你来说是一个选择吗? (类似于这个CI script)
-
我的意思是 ASP.Net Core。抱歉,我在大多数地方都说 ASP.Net Core,但在我的一个参考文献中省略了“ASP”。
-
你用我的方式解决这个问题吗?
-
@starain-MSFT,不幸的是我还不能尝试。我将 .NET Core 项目升级到 .NET Core 2.0 并且遇到了无穷无尽的麻烦。当我构建旧版 .NET 站点时,我得到了一组系统 dll,但由于某种原因,当我编译 .NET Core 项目时,它会将旧版 bin 文件夹中的那些系统 dll 替换为旧版本。这会导致 bindingRedirect 问题。有问题的文件是版本为 4.0.11.0 的 System.Runtime 和 System.IO 文件。它们正被编号为 4.0.10.0 的版本所取代。 System.Http 也是一个问题,但它总是一个问题。
标签: asp.net .net asp.net-core msbuild azure-pipelines