2011-06-06 34 views
3

包裝網項目中,我有5個Web項目的解決方案,並希望他們包裝的,所以我構建它運行後msbuild mysolution.sln /t:Package並獲得這樣的:用的MSBuild

C:\ mysolution.sln.metaproj:錯誤 MSB4057:項目中存在目標「包裝」不存在 。

如果我將每個項目逐一打包,一切都很好。這是愚蠢和不自然的,我不想在我的CI過程中有5個額外的步驟。有什麼特別的關於Package目標MSBuild無法執行它像經常BuildClean?什麼是* .sln.metaproj?

回答

5

.sln.metaproj文件是MSBuild在嘗試構建解決方案文件時自動生成的。創建此文件是因爲解決方案文件不是MSBuild項目。在這個生成的文件是autocreated標準的塔塔建設,清潔等,但不包。您最好的選擇可能是從使用解決方案文件切換到使用引用項目的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> 

你也可以添加一個存根「生成文件項目」名字類似「包中的所有」你的解決方案,直接在上面像上面一個一個MSBuild項目要求的MSBuild。構建這個makefile項目將執行包的步驟。

如果要查看生成的metaproj,將名爲MSBuildEmitSolution的環境變量設置爲值'1'並運行構建,臨時文件將被保留。

0

在TeamCity中,我將命令行參數添加到版本/p:IsPackaging=true