2012-10-23 3 views
2

많은 프로젝트가있는 솔루션을 컴파일하기 전에 일부 작업을 실현하는 MSBuild 스크립트가 있습니다.
모든 프로젝트 속성 폴더에 프로세스 중에 생성 된 파일 (SharedAssemblyInfo _ $ (ambiente) .cs)을 포함해야합니다.

문제를 해결할 수있는 단서가 있습니까?

미리 감사드립니다. 루트에 MSBuild .proj에 > < 컴파일 > 항목 - 나는 당신이 <ItemGroup>를 참조MSBuild를 사용하여 .csproj에 파일 포함

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

답변

2

:

추신 : 여기 내 스크립트입니다. 좋은 첫 걸음이지만 빌드 스크립트가 아니라 실제 .csproj에 그대로 두어야합니다.

이렇게하려면 링크로 사용할 파일에 추가하는 각 .csproj에 BeforeBuild 작업을 추가하십시오.

뭔가 같은 :

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