2013-08-01 29 views
0

從Web應用程序項目構建Web部署包時存在問題(在包含多個項目的解決方案中作爲多個Web應用程序)。MsBuild無法構建包,但可以在「正常」構建後「構建」或構建包

這實際工作

我可以建立項目的命令行就好了,如果我用這個命令,例如:

msbuild D:\PathTo\Solution\Project\Project.csproj 
    /fl /flp:logfile="D:\buildadventures\Build.log";errorsonly;verbosity=diagnostic 
    /p:SolutionDir="D:\PathTo\Project\\";Configuration=Release;Platform=AnyCpu 

但這不起作用

但是當我嘗試使用相同的命令時,有點不同,以便爲我構建部署包:

msbuild D:\PathTo\Solution\Project\Project.csproj 
    /fl /flp:logfile="D:\buildadventures\Build.log";errorsonly;verbosity=diagnostic 
    /T:Package 
    /p:SolutionDir="D:\PathTo\Solution\\";Configuration=Release;Platform=AnyCpu; 
    PackageLocation="D:\buildadventures\Project.zip"; 
    AutoParameterizationWebConfigConnectionStrings=false 

...這悲慘的失敗了,吐出上百的錯誤「的類型或命名空間名稱‘’不存在」 -kind

爲什麼它會以這種方式工作?

然而,奇怪的是,我發佈的第二個命令工作正常,如果第一個命令在此之前執行。

我認爲執行「正常」構建時執行的任務與構建包時執行的任務不同,現在我想知道它們以何種方式不同。

對症似乎什麼導致它

我注意到,在該項目的項目文件,我想包含接近尾聲自定義欄目構建一個軟件包:

<PropertyGroup> 
    <PreBuildEvent> 
     cscript $(ProjectDir)SvnRevision\svnrevision.vbs $(ProjectDir) $(ProjectDir)Version.cs 
     nuget install "$(ProjectDir)packages.config" -o "$(SolutionDir)Packages" 
    </PreBuildEvent> 
</PropertyGroup> 

這似乎對這種差異負責;如果我做了一個「正常」的構建,我可以看到之後,在我的解決方案文件夾中創建了一個新的「Packages」目錄。 但是,正如您可能已經猜到的那樣,當我嘗試執行程序包創建命令時,該目錄缺失。如果我讓Visual Studio爲我創建軟件包,我也不會遇到這個問題。

也許我不得不改變項目文件或傳遞屬性來爲我的包創建帶來這種行爲嗎?

或者有沒有辦法強制一個「正常」的構建,然後只是追加包的創建?

回答

0

傻了。 我能夠通過在我的msbuild命令中調用多個目標來解決此問題,例如:

msbuild D:\PathTo\Solution\Project\Project.csproj 
    /fl /flp:logfile="D:\buildadventures\Build.log";errorsonly;verbosity=diagnostic 
    /t:Build;Package 
    /p:SolutionDir="D:\PathTo\Solution\\";Configuration=Release;Platform=AnyCpu; 
    PackageLocation="D:\buildadventures\Project.zip"; 
    AutoParameterizationWebConfigConnectionStrings=false