2011-08-11 3 views
4

Lorsque j'essaie de créer un package pour le déploiement Web à l'aide de msbuild, il ne contient que la DLL de projets. Le fichier zip du package ou le répertoire temporaire n'inclut pas les DLL du projet référencé. J'ai regardé this post et ce n'est pas mon problème. J'utilise définitivement le code des projets référencés dans mon projet principal pour lequel je crée le package de déploiement. J'utilise MSBUILD 4 pour créer le paquet.Le package MSBUILD web deploy n'inclut pas les DLL de référence du projet

Lorsque je crée le paquet en utilisant VS2010 en utilisant exactement le même fichier de projet, cela fonctionne très bien. Tous les projets référencés ont leurs DLL inclus dans le fichier package.zip.

J'ai essayé de changer l'emplacement de _PackageTempDir et cela n'a pas résolu le problème non plus.

J'ai essayé d'extraire la propriété ExcludeFilesFromDeployment et de définir le paramètre PackageAsSingleFile sur false pour voir si cela changerait les résultats.

Voici ma cible pour Package. Tout le regex est ainsi je peux tirer mon nom de fichier de projet à la fin d'un chemin de recherche et ensuite utiliser ce nom pour le nom du dossier de sortie et le nom du fichier zip. Le PackageOutputDir est une propriété que j'importe.

<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> 

Vous ne savez pas pourquoi cela n'inclut pas mes dll de projet référencés?

Répondre

3

Vous pourriez faire ce qui suit dans votre 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> 

Où que vous appelez msbuild vous devez ajouter une propriété qui sera utilisé en $ (PackageProjectName) en procédant comme suit:

msbuild.exe/propriété: PackageProjectName = $ projet

+0

qu'est-ce que cela ferait exactement? – dove

+1

Je serais ravi de savoir pourquoi DeployOnBuild = true aboutit à ce que les assemblys ne soient pas copiés dans le dossier obj –

Questions connexes