是否有将解决方案配置映射到环境并使用 MsDeploy 为每个环境打包的良好模式?
最短版本:获取此文件,并尝试更改 .msbuild 文件以创建一个包。
细节
我有一个包含大量库和 ASP.NET MVC 应用程序的解决方案。我使用调用主解决方案的 msbuild 文件驱动构建,然后执行其他操作。我想使用新的 msdeploy 打包来准备一个 .zip 文件以供以后分发,但我遇到了各种困难。
我的解决方案有 4 种配置:Local
、Dev
、Test
和Prod
,它们与我想要映射到的环境相匹配。在该解决方案中,所有库都具有Debug
和Release
往常一样的模式。例如,在Local
解决方案模式下,所有库都在模式下编译Debug
。然后,主应用程序具有与解决方案匹配的环境,以便我可以拥有Web.Dev.config
等等,这似乎是使用事物的自然方式。
如果我这样打包:
<Target Name="BuildWebPackage">
<MSBuild Projects="..\Publisher\Site\Site.vbproj"
Targets="Package"/>
</Target>
我遇到了一个问题,Configuration=Local
即错误地映射到Site.vbproj
引用的库项目,并且无法编译它们。
我看到了两种可能的解决方案:一种我无法正常工作,另一种非常难看。
尝试 1
我尝试Package
通过解决方案调用目标(在此示例中,“应用程序”是 Site 项目所在的解决方案文件夹......我已经为这篇文章简化了内容,因为解决方案中实际上有多个应用程序。)
<Target Name="BuildWebPackage">
<MSBuild Projects="..\Publisher\Publisher.sln"
Targets="Applications\Site:Package"/>
</Target>
我认为这种SolutionFolder\ProjectName:Target
语法是如何做到这一点的,因为:Clean
运行......但是,这会抛出
error MSB4057: The target "Applications\Site:Package" does not exist in the project.
尝试 2
现在是丑陋的解决方案:如果我修改我的所有库以为这 4 个解决方案配置添加 4 个附加配置,它就可以工作。但是,如果我以后想与具有不同环境的项目共同开发共享库,这很丑陋,而且确实是一个糟糕的计划。此外,这些环境与库无关,仅在使用库的顶级应用程序的上下文中才有意义。味道不好。
嗯?
我喜欢解决方案中的多个环境,以及花哨的新 Web.config 替换东西,但我不知道Package
在这种情况下如何调用 msdeploy 任务,以便我可以在 TeamCity 中构建包。
(请注意,我可能不想调用 msdeploy 命令行,因为它用于将 IIS 应用程序转换为包。不是我在这里所做的。)
样本
同样,我在这里完全被难住了,所以如果你想帮助实验,我已经把这个示例解决方案放在一起。