summaryrefslogtreecommitdiffstats
path: root/build.proj
diff options
context:
space:
mode:
Diffstat (limited to 'build.proj')
-rw-r--r--build.proj197
1 files changed, 152 insertions, 45 deletions
diff --git a/build.proj b/build.proj
index 8e34a8d..33f6aa8 100644
--- a/build.proj
+++ b/build.proj
@@ -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>