2011-08-11 154 views
4

當我嘗試使用msbuild創建一個用於web部署的包時,它只包含項目dll。包壓縮文件或臨時目錄不包含引用的項目的dll。我看過this post,那不是我的問題。我絕對使用我創建部署包的主項目中引用項目的代碼。MSBUILD web部署包不包含項目引用DLL的

我使用MSBUILD 4來創建包。

當我使用VS2010使用完全相同的項目文件創建包時,它工作正常。所有引用的項目都包含在package.zip文件中的dll。

我試着改變_PackageTempDir的位置,但也沒有解決問題。

我試過拿出ExcludeFilesFromDeployment屬性並將PackageAsSingleFile設置爲false來查看是否會改變結果。

這是我的包裝目標。所有的正則表達式都是這樣,我可以將我的項目文件名稱從搜索路徑的末尾拉出,然後使用該名稱作爲輸出文件夾的名稱和zip文件的名稱。 PackageOutputDir是我正在導入的屬性。

<Target Name="Package"> 
    <MSBuild Projects="@(PackageProject)" Targets="Package" Properties="Platform=$(Platform); 
                      Configuration=$(Configuration); 
                      DeployOnBuild=true; 
                      DeployTarget=Package; 
             PackageLocation=$(PackageOutputDir)\$([System.Text.RegularExpressions.Regex]::Split($(ProjectName), '(.*\\)([a-z,A-Z,0-9,_,-]+)(\.\*proj;)')[2])\$([System.Text.RegularExpressions.Regex]::Split($(ProjectName), '(.*\\)([a-z,A-Z,0-9,_,-]+)(\.\*proj;)')[2]).zip; 
             PackageAsSingleFile=true; 
             ExcludeFilesFromDeployment=Web.config; 
             _PackageTempDir=$(PackageOutputDir)\temp;"> 
    </MSBuild> 
    </Target> 

任何想法爲什麼它不包括我引用的項目DLL?

回答

3

您可以在您的MasterBuild.proj中執行以下操作。

<Target Name="Package"> 
    <ConvertToAbsolutePath Paths="$(PackageOutputDir)"> 
     <Output TaskParameter="AbsolutePaths" PropertyName="Source_Dir_Abs"/> 
    </ConvertToAbsolutePath> 
    <MSBuild Projects="@(PackageProject)" Targets="Package" 
     properties="Platform=$(Platform); 
     Configuration=$(Configuration); 
     DeployOnBuild=false; 
     DeployTarget=Package; 
     PackageLocation=$(Source_Dir_Abs)\$(PackageProjectName).zip; 
     PackageAsSingleFile=true; 
     ExcludeFilesFromDeployment=Web.config; 
     _PackageTempDir=$(PackageOutputDir)\temp;"> 
    </MSBuild> 
    </Target> 

如果您呼叫的MSBuild則需要通過執行以下操作以添加將在$(PackageProjectName)中使用的屬性:

msbuild.exe /屬性:PackageProjectName = $項目

+0

這到底會做什麼? – dove

+1

我很想知道爲什麼DeployOnBuild = true導致程序集未被複制到obj文件夾 –

相關問題