如何将解决方案配置映射到环境并使用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
目标(在本例中,“Applications”是包含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替换功能,但我不知道如何在这种情况下调用msdeploy的Package
任务,以便我可以在TeamCity中构建软件包。
(请注意,我可能不想调用msdeploy命令行,因为它用于将IIS应用程序转换为软件包。这不是我在这里做的事情。)
示例
再次,我完全被难住了,因此如果您想进行实验并提供帮助,我已经准备好了此示例解决方案。