diff options
Diffstat (limited to 'build.proj')
-rw-r--r-- | build.proj | 197 |
1 files changed, 152 insertions, 45 deletions
@@ -3,16 +3,28 @@ <PropertyGroup> <AutomatedBuild>true</AutomatedBuild> <SolutionPath>$(ProjectRoot)\src\$(ProductName).sln</SolutionPath> + <ILMergeOutputAssemblyDirectory>$(OutputPath)\unified\</ILMergeOutputAssemblyDirectory> + <ILMergeOutputAssembly>$(ILMergeOutputAssemblyDirectory)\$(ProductName).dll</ILMergeOutputAssembly> + <ProjectTemplatesLayoutPath>$(ProjectRoot)\obj\$(Configuration)\projecttemplates\</ProjectTemplatesLayoutPath> </PropertyGroup> <Import Project="$(ProjectRoot)\tools\$(ProductName).Versioning.targets"/> <Import Project="$(ProjectRoot)\tools\Documentation.targets"/> <Import Project="$(ProjectRoot)\tools\Publish.targets"/> <UsingTask AssemblyFile="$(ProjectRoot)\lib\MSBuild.Community.Tasks.dll" TaskName="Zip"/> + <UsingTask AssemblyFile="$(ProjectRoot)\lib\MSBuild.Community.Tasks.dll" TaskName="ILMerge"/> <ItemGroup> <SampleProjects Include="$(ProjectRoot)\samples\**\*.csproj" /> <SampleSites Include="OAuthConsumer;OAuthServiceProvider;InfoCardRelyingParty" /> + <ProjectTemplates Include="$(ProjectRoot)\projecttemplates\**\*.csproj" /> + <ILMergeInputAssemblies Include="$(OutputPath)\$(ProductName).dll; + $(ProjectRoot)\lib\Microsoft.Contracts.dll; "/> + <DelaySignedAssemblies Include="$(ILMergeOutputAssembly); + $(OutputPath)\$(ProductName).dll; + $(OutputPath)\$(ProductName).Contracts.dll; + $(OutputPath)\$(ProductName).Test.dll; + $(ProjectRoot)\samples\OpenIdOfflineProvider\bin\$(Configuration)\OpenIdOfflineProvider.exe" /> </ItemGroup> <Target Name="Clean" DependsOnTargets="CleanDocumentation;UnpublishSamples;UnpublishDocumentation"> @@ -22,8 +34,9 @@ $(ProjectRoot)\bin; $(ProjectRoot)\**\obj; $(ProjectRoot)\doc\api; - $(ProjectRoot)\drops; + $(DropsRoot); $(ProjectRoot)\src\PrecompiledWeb; + $(ProjectTemplatesLayoutPath); " /> <DirtyDirectories Include="@(SampleDirectories->'%(FullPath)\bin')" /> <DirtyDirectories Include="@(SampleDirectories->'%(FullPath)\obj')" /> @@ -37,50 +50,66 @@ <RemoveDir Directories="@(DirtyDirectories)" /> </Target> - <Target Name="BuildProduct"> + <Target Name="SkipVerification" Condition="'$(IsElevated)' == 'true'"> + <SignatureVerification SkipVerification="true" AssemblyName="*" PublicKeyToken="$(PublicKeyToken)" /> + </Target> + + <Target Name="BuildProduct" DependsOnTargets="SkipVerification"> <MSBuild Projects="$(ProjectRoot)\src\$(ProductName)\$(ProductName).csproj" /> </Target> - <Target Name="BuildTests"> + <Target Name="BuildTests" DependsOnTargets="SkipVerification"> <MSBuild Projects="$(ProjectRoot)\src\$(ProductName).Test\$(ProductName).Test.csproj" /> </Target> - <Target Name="BuildSamples"> + <Target Name="BuildSamples" DependsOnTargets="SkipVerification"> <MSBuild Projects="@(SampleProjects)" /> - <MSBuild Projects="$(SolutionPath)" Targets="@(SampleSites)" Properties="Sign=$(Sign)" /> + <MSBuild Projects="$(SolutionPath)" Targets="@(SampleSites)" /> </Target> - <Target Name="Build"> - <!-- We explicitly pass the Sign property in because if properties are set - inside this very .proj file instead of being passed on the command-line, their - values won't propagate automatically. --> - <MSBuild Projects="$(SolutionPath)" Properties="Sign=$(Sign)" /> + <Target Name="Build" DependsOnTargets="SkipVerification"> + <MSBuild Projects="$(SolutionPath)" /> </Target> - <Target Name="Rebuild"> - <!-- We explicitly pass the Sign property in because if properties are set - inside this very .proj file instead of being passed on the command-line, their - values won't propagate automatically. --> - <MSBuild Projects="$(SolutionPath)" Targets="Rebuild" Properties="Sign=$(Sign)" /> + <Target Name="Rebuild" DependsOnTargets="SkipVerification"> + <MSBuild Projects="$(SolutionPath)" Targets="Rebuild" /> </Target> - <Target Name="_EnsureCleanTools" DependsOnTargets="_SetToolsProperties" Condition="'$(NoClean)' != 'true'"> - <!-- clean up any previous drop with the same name so we don't aggregate files. --> - <RemoveDir Directories="$(ToolsDirectory)" /> + <Target Name="BuildUnifiedProduct" + DependsOnTargets="BuildProduct" + Inputs="@(ILMergeInputAssemblies)" + Outputs="$(ILMergeOutputAssembly)"> + <MakeDir Directories="$(ILMergeOutputAssemblyDirectory)" /> + <ILMerge ExcludeFile="$(ProjectRoot)\ILMergeInternalizeExceptions.txt" + InputAssemblies="@(ILMergeInputAssemblies)" + OutputFile="$(ILMergeOutputAssembly)" + KeyFile="$(PublicKeyFile)" + DelaySign="true" + /> + </Target> + + <Target Name="ReSignDelaySignedAssemblies"> + <Message Text="Signing delay-signed assemblies." /> + <ReSignDelaySignedAssemblies + KeyContainer="$(KeyPairContainer)" + Assemblies="@(DelaySignedAssemblies)" + Condition="Exists(%(Identity))" /> </Target> - <Target Name="_SetToolsProperties"> + <Target Name="ToolsLayout" DependsOnTargets="GetBuildVersion;_SetDropProperties;BuildUnifiedProduct"> <PropertyGroup> - <ToolsDirectory>$(ProjectRoot)\drops\$(ProductName)-Tools-$(BuildVersion)</ToolsDirectory> + <ToolsDirectory>$(DropsRoot)\$(ProductName)-Tools-$(BuildVersion)</ToolsDirectory> </PropertyGroup> - </Target> - <Target Name="ToolsLayout" DependsOnTargets="GetBuildVersion;_SetDropProperties;_SetToolsProperties;_EnsureCleanTools"> <ItemGroup> <ToolProjects Include="$(ProjectRoot)\Samples\OpenIdOfflineProvider\OpenIdOfflineProvider.csproj" /> <OfflineProvider Include=" $(ProjectRoot)\Samples\OpenIdOfflineProvider\bin\$(Configuration)\**\*.dll; - $(ProjectRoot)\Samples\OpenIdOfflineProvider\bin\$(Configuration)\OpenIdOfflineProvider.exe" /> + $(ILMergeOutputAssembly).*; + $(ProjectRoot)\Samples\OpenIdOfflineProvider\bin\$(Configuration)\OpenIdOfflineProvider.exe" + Exclude=" + $(ProjectRoot)\Samples\OpenIdOfflineProvider\bin\$(Configuration)\$(ProductName).*; + "/> <OfflineProviderTargets Include=" @(OfflineProvider->'$(ToolsDirectory)\%(RecursiveDir)%(FileName)%(Extension)')"/> @@ -88,8 +117,10 @@ <AllToolTargets Include="@(OfflineProviderTargets)" /> </ItemGroup> - <MSBuild Projects="@(ToolProjects)" Properties="Sign=$(Sign)" /> + <MSBuild Projects="@(ToolProjects)" /> + <!-- clean up any previous drop with the same name so we don't aggregate files. --> + <RemoveDir Directories="$(ToolsDirectory)" Condition="'$(NoClean)' != 'true'" /> <MakeDir Directories="@(ToolsDirectory)" /> <Copy SourceFiles="@(AllToolSources)" DestinationFiles="@(AllToolTargets)" SkipUnchangedFiles="true" /> </Target> @@ -105,6 +136,87 @@ WorkingDirectory="$(ToolsDirectory)" /> </Target> + <Target Name="BuildProjectTemplates"> + <MSBuild Projects="@(ProjectTemplates)" /> + </Target> + + <Target Name="ProjectTemplatesLayout" DependsOnTargets="BuildUnifiedProduct;ReSignDelaySignedAssemblies;BuildProjectTemplates"> + <ItemGroup> + <ProjectTemplatesSource Include="$(ProjectRoot)\projecttemplates\**\*" + Exclude=" + $(ProjectRoot)\projecttemplates\**\*.sln.cache; + $(ProjectRoot)\projecttemplates\**\*.suo; + $(ProjectRoot)\projecttemplates\**\*.gitignore; + $(ProjectRoot)\projecttemplates\**\*.log*; + $(ProjectRoot)\projecttemplates\**\*~; + $(ProjectRoot)\projecttemplates\**\Settings.StyleCop; + $(ProjectRoot)\projecttemplates\**\StyleCop.Cache; + $(ProjectRoot)\projecttemplates\**\*.user; + $(ProjectRoot)\projecttemplates\**\obj\**; + $(ProjectRoot)\projecttemplates\**\bin\DotNetOpenAuth.dll; + $(ProjectRoot)\projecttemplates\**\bin\DotNetOpenAuth.pdb; + $(ProjectRoot)\projecttemplates\**\bin\Microsoft.Contracts.dll; + $(ProjectRoot)\projecttemplates\**\*.ldf; + $(ProjectRoot)\projecttemplates\**\*.mdf; + "/> + <_ProjectTemplatesTransformSource Include="@(ProjectTemplatesSource)" Condition=" + '%(Extension)' == '.cs' + or '%(Extension)' == '.csproj' + or '%(Extension)' == '.config' + or '%(Extension)' == '.Master' + or '%(Extension)' == '.aspx' + or '%(Extension)' == '.asax' + "> + <BeforeTokens>%(RecursiveDir)</BeforeTokens> + <AfterTokens>$safeprojectname$</AfterTokens> + </_ProjectTemplatesTransformSource> + <ProjectTemplatesSource Remove="@(_ProjectTemplatesTransformSource)" /> + + <ProjectTemplatesLayout Include="@(ProjectTemplatesSource->'$(ProjectTemplatesLayoutPath)%(RecursiveDir)%(FileName)%(Extension)')"/> + <ProjectTemplatesTransformLayout Include="@(_ProjectTemplatesTransformSource->'$(ProjectTemplatesLayoutPath)%(RecursiveDir)%(FileName)%(Extension)')"/> + + <!-- Include the template icon --> + <ProjectTemplatesSource Include="@(ProjectTemplates->'$(ProjectRoot)\doc\logo\dotnetopenid.ico')" /> + <ProjectTemplatesLayout Include="@(ProjectTemplates->'$(ProjectTemplatesLayoutPath)%(RecursiveDir)__TemplateIcon.ico')" /> + + <!-- Include the unified, signed version of the library --> + <ProjectTemplatesSource Include="@(ProjectTemplates->'$(ILMergeOutputAssembly)')" /> + <ProjectTemplatesSource Include="@(ProjectTemplates->'$(ILMergeOutputAssemblyDirectory)\$(ProductName).pdb')" /> + <ProjectTemplatesSource Include="@(ProjectTemplates->'$(OutputPath)\$(ProductName).Contracts.dll')" /> + <ProjectTemplatesLayout Include="@(ProjectTemplates->'$(ProjectTemplatesLayoutPath)%(RecursiveDir)bin\$(ProductName).dll')" /> + <ProjectTemplatesLayout Include="@(ProjectTemplates->'$(ProjectTemplatesLayoutPath)%(RecursiveDir)bin\$(ProductName).pdb')" /> + <ProjectTemplatesLayout Include="@(ProjectTemplates->'$(ProjectTemplatesLayoutPath)%(RecursiveDir)bin\$(ProductName).Contracts.dll')" /> + </ItemGroup> + <Trim Inputs="@(_ProjectTemplatesTransformSource)" MetadataName="BeforeTokens" AllAfter="\"> + <Output TaskParameter="Outputs" ItemName="ProjectTemplatesTransformSource" /> + </Trim> + <MSBuild Projects="@(ProjectTemplates)" /> + <RemoveDir Directories="$(ProjectTemplatesLayoutPath)" Condition="'$(NoClean)' != 'true'" /> + <Copy SourceFiles="@(ProjectTemplatesSource)" DestinationFiles="@(ProjectTemplatesLayout)" SkipUnchangedFiles="true" /> + <CopyWithTokenSubstitution SourceFiles="@(ProjectTemplatesTransformSource)" DestinationFiles="@(ProjectTemplatesTransformLayout)" SkipUnchangedFiles="true"> + <Output TaskParameter="CopiedFiles" ItemName="CopiedProjectTemplateFiles" /> + </CopyWithTokenSubstitution> + <ChangeProjectReferenceToAssemblyReference + Projects="@(CopiedProjectTemplateFiles)" + Condition="'%(Extension)' == '.csproj'" + ProjectReference="..\..\src\$(ProductName)\$(ProductName).csproj" + Reference="Bin\$(ProductName).dll" /> + </Target> + + <Target Name="ProjectTemplates" DependsOnTargets="ProjectTemplatesLayout"> + <PropertyGroup> + <WebFormsRelyingPartyZipFile>$(ProjectTemplatesLayoutPath)\WebFormsRelyingParty.zip</WebFormsRelyingPartyZipFile> + </PropertyGroup> + <ItemGroup> + <WebFormsRelyingPartyProjectTemplateLayout Include="$(ProjectTemplatesLayoutPath)\WebFormsRelyingParty\**\*" /> + </ItemGroup> + <Delete Files="$(WebFormsRelyingPartyZipFile)" /> + <Zip + Files="@(WebFormsRelyingPartyProjectTemplateLayout)" + ZipFileName="$(WebFormsRelyingPartyZipFile)" + WorkingDirectory="$(ProjectTemplatesLayoutPath)\WebFormsRelyingParty" /> + </Target> + <Target Name="Documentation" DependsOnTargets="BuildProduct;Chm" Condition="'$(NoDocumentation)' != 'true'"> </Target> @@ -119,31 +231,17 @@ <Target Name="_SetDropProperties"> <!-- This target is necessary because PropertyGroups within the same Target as where CallTarget is fired do NOT affect those called targets. --> - <PropertyGroup> - <Sign Condition="'$(Sign)' == ''">true</Sign> - </PropertyGroup> - <!-- The rest of these are here so that other DependsOn targets have access to these properties. --> <PropertyGroup> - <DropDirectory>$(ProjectRoot)\drops\$(ProductName)-$(BuildVersion)</DropDirectory> + <DropDirectory>$(DropsRoot)\$(ProductName)-$(BuildVersion)</DropDirectory> </PropertyGroup> </Target> - <Target Name="_EnsureCleanDrop" Condition="'$(NoClean)' != 'true'"> - <!-- This target only does a clean sufficient to guarantee that our DotNetOpenAuth.dll is rebuilt, but - we don't usually want to clean our documentation because that takes forever to build froms scratch. --> - <MSBuild Projects="$(SolutionPath)" Targets="Clean" /> - - <!-- clean up any previous drop with the same name so we don't aggregate files. --> - <RemoveDir Directories="$(DropDirectory)" /> - </Target> - - <Target Name="DropLayout" DependsOnTargets="GetBuildVersion;_SetDropProperties;_EnsureCleanDrop;BuildProduct;BuildSamples;Documentation"> - <Warning Condition=" '$(Configuration)' != 'release' " Text="Building $(Configuration) instead of Release!" /> - <Warning Condition=" '$(Sign)' != 'true' " Text="Building unsigned!" /> + <Target Name="DropLayout" DependsOnTargets="GetBuildVersion;_SetDropProperties;BuildUnifiedProduct;ReSignDelaySignedAssemblies;BuildSamples;ProjectTemplates;Documentation"> <PropertyGroup> <DropBinDirectory>$(DropDirectory)\Bin</DropBinDirectory> <DropLibDirectory>$(DropDirectory)\Lib</DropLibDirectory> + <DropProjectTemplatesDirectory>$(DropDirectory)\Project Templates</DropProjectTemplatesDirectory> <DropSamplesDirectory>$(DropDirectory)\Samples</DropSamplesDirectory> <DropSpecsDirectory>$(DropDirectory)\Specs</DropSpecsDirectory> </PropertyGroup> @@ -152,6 +250,7 @@ $(DropDirectory); $(DropBinDirectory); $(DropLibDirectory); + $(DropProjectTemplatesDirectory); $(DropSamplesDirectory); $(DropSpecsDirectory); " /> @@ -164,16 +263,19 @@ " Exclude="$(ProjectRoot)\Doc\README.*.html;" /> <DropBinSourceFiles Include=" - $(OutputPath)\$(ProductName).???; + $(ILMergeOutputAssemblyDirectory)\$(ProductName).???; + $(OutputPath)\**\$(ProductName).resources.dll; + $(OutputPath)\$(ProductName).xml; + $(OutputPath)\$(ProductName).Contracts.???; $(ProjectRoot)\Doc\README.Bin.html; $(ProjectRoot)\src\$(ProductName)\Configuration\$(ProductName).xsd; " /> <DropLibSourceFiles Include=" $(ProjectRoot)\Lib\log4net.*; " /> + <DropProjectTemplatesSourceFiles Include="$(ProjectTemplatesLayoutPath)\*.zip" /> <DropSamplesSourceFiles Include="$(ProjectRoot)\Samples\**" Exclude=" $(ProjectRoot)\**\obj\**; - $(ProjectRoot)\**\*.user; $(ProjectRoot)\**\*.sln.cache; $(ProjectRoot)\**\*.suo; $(ProjectRoot)\**\*.user; @@ -183,6 +285,7 @@ $(ProjectRoot)\**\*~; $(ProjectRoot)\**\Debug\**; $(ProjectRoot)\**\Settings.StyleCop; + $(ProjectRoot)\**\StyleCop.Cache; $(ProjectRoot)\Samples\**\DotNetOpenAuth.???; $(ProjectRoot)\Samples\**\log4net.???; $(ProjectRoot)\Samples\**\PresentationCore.dll; @@ -196,6 +299,7 @@ <DropFiles Include="@(DropSourceFiles->'$(DropDirectory)\%(RecursiveDir)%(FileName)%(Extension)')"/> <DropBinFiles Include="@(DropBinSourceFiles->'$(DropBinDirectory)\%(RecursiveDir)%(FileName)%(Extension)')"/> <DropLibFiles Include="@(DropLibSourceFiles->'$(DropLibDirectory)\%(RecurisveDir)%(FileName)%(Extension)')"/> + <DropProjectTemplatesFiles Include="@(DropProjectTemplatesSourceFiles->'$(DropProjectTemplatesDirectory)\%(FileName)%(Extension)')" /> <DropSamplesFiles Include="@(DropSamplesSourceFiles->'$(DropSamplesDirectory)\%(RecursiveDir)%(FileName)%(Extension)')"/> <DropSamplesRefreshFiles Include="@(DropSamplesRefreshSourceFiles->'$(DropSamplesDirectory)\%(RecursiveDir)%(FileName).refresh')"/> <DropSpecsFiles Include="@(DropSpecsSourceFiles->'$(DropSpecsDirectory)\%(RecursiveDir)%(FileName)%(Extension)')"/> @@ -204,6 +308,7 @@ @(DropSourceFiles); @(DropBinSourceFiles); @(DropLibSourceFiles); + @(DropProjectTemplatesSourceFiles); @(DropSamplesSourceFiles); @(DropSamplesRefreshSourceFiles); @(DropDocSourceFiles); @@ -214,6 +319,7 @@ @(DropFiles); @(DropBinFiles); @(DropLibFiles); + @(DropProjectTemplatesFiles); @(DropSamplesFiles); @(DropSamplesRefreshFiles); @(DropDocFiles); @@ -221,6 +327,8 @@ " /> </ItemGroup> + <!-- clean up any previous drop with the same name so we don't aggregate files. --> + <RemoveDir Directories="$(DropDirectory)" Condition="'$(NoClean)' != 'true'" /> <MakeDir Directories="@(DropDirectories)" /> <Copy SourceFiles="@(AllDropSources)" DestinationFiles="@(AllDropTargets)" SkipUnchangedFiles="true" /> <!-- fix up the samples so that they will compile right out of the drop --> @@ -236,7 +344,7 @@ <DropZip>$(DropDirectory).zip</DropZip> </PropertyGroup> <Delete Files="$(DropZip)" /> - <Zip Files="@(AllDropTargets)" ZipFileName="$(DropZip)" WorkingDirectory="$(ProjectRoot)\drops" /> + <Zip Files="@(AllDropTargets)" ZipFileName="$(DropZip)" WorkingDirectory="$(DropsRoot)" /> </Target> <!-- Although Nightly includes publishing samples and docs, those targets are conditioned for @@ -244,5 +352,4 @@ <Target Name="Nightly" DependsOnTargets="Drop;Tools;PublishSamples;PublishDocumentation"> </Target> - </Project> |