Dan*_*tch 33 .net msbuild package msdeploy asp.net-mvc-2
是否有良好的模式可以将解决方案配置映射到环境并使用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引用的库项目,并且它无法编译它们.
我看到了两种可能的解决方案:一种是我无法正常工作,另一种是非常难看.
我尝试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.
现在对于丑陋的解决方案:如果我修改所有库,为这4种解决方案配置提供4个额外配置,它就可以工作.但是,如果我想稍后与具有不同环境的项目共同开发共享库,那么这是一个丑陋而且实际上是一个糟糕的计划.此外,这些环境与库无关,只有在使用库的顶级应用程序的上下文中才有意义.口味不好.
我喜欢解决方案中的多个环境,以及花哨的新Web.config替换东西,但我不知道如何Package在这种情况下调用msdeploy 任务,因此我可以在TeamCity中构建包.
(注意,我可能不想调用msdeploy命令行,因为它用于将IIS应用程序转换为包.不是我在这里做的.)
再一次,我已经完全被困在这里,所以如果你想帮助实验,我已经把这个样本解决方案放在一起了.
Jul*_*rau 40
第一次尝试失败,因为解决方案文件中不存在包目标.在解决方案文件上使用MSBuild时,会创建一个临时MSBuild项目(SamplePackage.sln.metaproj); 这个项目文件只包含一些目标(Build,Clean,Rebuild,Publish,...)
实现您想要的一种方法是使用DeployOnBuild属性,如下所示:
<PropertyGroup Condition="'$(Configuration)' == ''">
  <Platform>Any Cpu</Platform>
  <Configuration>Dev</Configuration>
  <PackageLocation>$(MSBuildProjectDirectory)\package.zip</PackageLocation>
</PropertyGroup>
<Target Name="Build">
  <MSBuild Projects="SamplePackage.sln"
           Targets="Build"/>
</Target>
<Target Name="BuildWebPackage">
  <MSBuild Projects="SamplePackage.sln"
           Properties="Platform=$(Platform);
                       Configuration=$(Configuration);
                       DeployOnBuild=true;
                       DeployTarget=Package;
                       PackageLocation=$(PackageLocation);"/>
</Target>
其他链接:
| 归档时间: | 
 | 
| 查看次数: | 10597 次 | 
| 最近记录: |