2012-10-23 6 views
2

J'ai un script MSBuild qui réalise certaines opérations avant de compiler une solution qui a beaucoup de projets.
Je dois inclure un fichier (SharedAssemblyInfo _ $ (ambiente) .cs) créé pendant le processus dans chaque dossier Properties du projet.

Des indices pour résoudre ce problème?

Merci d'avance!Inclure les fichiers dans .csproj en utilisant MSBuild

PS .: Voici mon script:

<?xml version="1.0" encoding="utf-8"?> 
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0"> 
    <Import Project="$(MSBuildExtensionsPath)\MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets" /> 
    <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" /> 
    <Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets"/> 

    <ItemGroup> 
    <Solution Include="Stoque.ECM.sln" /> 

    <Compile Include="..\SharedAssemblyInfo_$(ambiente).cs"> 
     <Link>Properties\SharedAssemblyInfo_$(ambiente).cs</Link> 
    </Compile> 

    </ItemGroup> 
    <PropertyGroup> 
    <TMaior>2</TMaior> 
    <TMedio>0</TMedio> 
    <TMenor>0</TMenor> 

    <DeployDir>E:\compartilhada\abaris</DeployDir> 
    </PropertyGroup> 

    <Target Name="GetProjects"> 
    <GetSolutionProjects Solution="%(Solution.Fullpath)"> 
     <Output ItemName="ProjectFiles" TaskParameter="Output" /> 
    </GetSolutionProjects> 
    </Target> 

    <Target Name="AssemblyVersion"> 
    <Time Format="yyMMdd"> 
     <Output TaskParameter="FormattedTime" PropertyName="TRevisao" /> 
    </Time> 
    <AssemblyInfo CodeLanguage="CS" OutputFile="..\SharedAssemblyInfo_$(ambiente).cs" AssemblyVersion="$(TMaior).$(TMenor).*" AssemblyFileVersion="$(versao)" AssemblyInformationalVersion="$(versao)" /> 
    <!-- <Copy SourceFiles="..\SharedAssemblyInfo_$(ambiente).cs" DestinationFolder="%(ProjectFiles.Filename)\Properties" ContinueOnError="false" /> --> 
    </Target> 

    <Target Name="Compile" DependsOnTargets="GetProjects"> 
    <MSBuild Projects="%(ProjectFiles.Fullpath)" 
    Properties="WebProjectOutputDir=$(DeployDir)\$(ambiente)\$(versao)\SITES_PUBLICADOS\%(ProjectFiles.Filename);Platform=$(Platform);Configuration=$(Configuration);OutputPath=$(DeployDir)\$(ambiente)\$(versao)\%(ProjectFiles.Filename)"> 
    </MSBuild> 
    </Target> 

</Project> 

Répondre

2

Je vois que vous avez un <ItemGroup>-> <Compile> article dans votre racine MSBuild .proj. C'est une bonne première étape, mais vous devez coller cela dans le .csproj réel, pas seulement votre script de construction. Pour cela, ajoutez une tâche BeforeBuild à chaque fichier .csproj ajouté dans le fichier que vous voulez en tant que lien.

Quelque chose comme:

<Target Name="BeforeBuild"> 
    <_FilesToInclude Include="..\SharedAssemblyInfo_$(ambiente).cs" /> 
    <Compile Include="@(_FilesToInclude->'%(Filename)%(Extension)')"> 
     <Link>%(RecursiveDir)%(Filename)%(Extension)</Link> 
    </Compile> 
    </ItemGroup> 
</Target> 
Questions connexes