使用MSBuild打包Web项目

时间:2011-06-06 16:41:00

标签: .net msbuild build-process

我有一个包含5个网络项目的解决方案,并希望将它们打包,以便在构建之后运行msbuild mysolution.sln /t:Package并获取此信息:

  

C:\ mysolution.sln.metaproj:错误   MSB4057:目标“包”没有   存在于项目中。

如果我逐个打包每个项目,一切都很好。这是愚蠢和不自然的,我不想在我的CI过程中有5个额外的步骤。 Package目标有什么特别之处,MSBuild无法像常规BuildClean那样执行它?什么是* .sln.metaproj?

2 个答案:

答案 0 :(得分:5)

.sln.metaproj文件由MSBuild在尝试构建解决方案文件时自动生成。创建此文件是因为解决方案文件不是MSBuild项目。在这个生成的文件中自动处理标准的Tarets Build,Clean等,但不是Package。您最好的选择可能是从使用解决方案文件切换到使用引用项目的MSBuild文件。它可能看起来像这样:

<Project ...>
   <ItemGroup>
      <Project Include="Project1.csproj" />
      <Project Include="Project2.csproj" />
      <Project Include="Project3.csproj" />
      <Project Include="Project4.csproj" />
      <Project Include="Project5.csproj" />
   </ItemGroup>
   <Target Name="Package">
      <MSBuild
         Projects="@(Project)"
         Targets="Package"
         Properties="Configuration=$(Configuration);Platform=$(Platform);..."
         />
   </Target>
   ...etc. for Build, Clean etc.
</Project>

您还可以将一个名为“Package All”的存根“makefile项目”添加到您的解决方案中,该解决方案直接在msbuild项目上调用MSBuild,如上所述。构建此makefile项目将执行包步骤。

仅供参考,要查看生成的元项目,将名为MSBuildEmitSolution的环境变量设置为值“1”并运行构建,将保留临时文件。

答案 1 :(得分:0)

在TeamCity中,我将命令行参数添加到构建/p:IsPackaging=true