summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndrew Arnott <andrewarnott@gmail.com>2010-02-11 07:46:56 -0800
committerAndrew Arnott <andrewarnott@gmail.com>2010-02-11 07:46:56 -0800
commitcc2976b4fcebf1f87f6211cb0e8558677b9e8fde (patch)
treeb65b48fd55b2a6601ff1e07837d0ccf67bccc85d
parent9aac5e6ed63693f5aad2ddf2e1e326d65018dc3f (diff)
downloadDotNetOpenAuth-cc2976b4fcebf1f87f6211cb0e8558677b9e8fde.zip
DotNetOpenAuth-cc2976b4fcebf1f87f6211cb0e8558677b9e8fde.tar.gz
DotNetOpenAuth-cc2976b4fcebf1f87f6211cb0e8558677b9e8fde.tar.bz2
Refactored build.proj to pull out project template building.
VSI and VSIX is broken right now. The only thing that works is raw project template layout itself. Very much a work in progress.
-rw-r--r--build.proj440
-rw-r--r--projecttemplates/MvcRelyingParty.vsixmanifest2
-rw-r--r--projecttemplates/RelyingPartyLogic/RelyingPartyLogic.csproj6
-rw-r--r--projecttemplates/WebFormsRelyingParty.vsixmanifest2
-rw-r--r--projecttemplates/projecttemplates.proj143
-rw-r--r--src/DotNetOpenAuth.BuildTasks/DotNetOpenAuth.BuildTasks.sln5
-rw-r--r--src/DotNetOpenAuth.BuildTasks/MergeProjectWithVSTemplate.cs25
-rw-r--r--src/DotNetOpenAuth/DotNetOpenAuth.csproj14
-rw-r--r--tools/DotNetOpenAuth.automated.props13
-rw-r--r--tools/DotNetOpenAuth.automated.targets29
-rw-r--r--tools/DotNetOpenAuth.props11
-rw-r--r--tools/DotNetOpenAuth.targets17
-rw-r--r--vsi/vsi.proj104
-rw-r--r--vsix/vsix.proj170
14 files changed, 546 insertions, 435 deletions
diff --git a/build.proj b/build.proj
index 123e4e4..095af7e 100644
--- a/build.proj
+++ b/build.proj
@@ -1,51 +1,30 @@
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$(MSBuildProjectDirectory)\tools\DotNetOpenAuth.props"/>
+ <Import Project="$(MSBuildProjectDirectory)\tools\DotNetOpenAuth.automated.props"/>
<PropertyGroup>
- <AutomatedBuild>true</AutomatedBuild>
- <SolutionPath>$(ProjectRoot)src\$(ProductName).sln</SolutionPath>
- <ILMergeOutputAssemblyDirectory>$(OutputPath)unified\</ILMergeOutputAssemblyDirectory>
- <ILMergeOutputAssembly>$(ILMergeOutputAssemblyDirectory)$(ProductName).dll</ILMergeOutputAssembly>
- <ProjectTemplatesLayoutPath>$(IntermediatePath)projecttemplates\</ProjectTemplatesLayoutPath>
-
- <VS2008ProjectTemplatesDirectory>$(IntermediatePath)VS2008projecttemplates\</VS2008ProjectTemplatesDirectory>
- <ProjectTemplatesVsiDirectory>$(IntermediatePath)vsi\</ProjectTemplatesVsiDirectory>
-
- <VS2010ProjectTemplatesDirectory>$(IntermediatePath)VS2010projecttemplates\</VS2010ProjectTemplatesDirectory>
- <ExtensionVsixLayoutDirectory>$(IntermediatePath)Vsix\</ExtensionVsixLayoutDirectory>
- <ProjectTemplateSubdirectory>$(ExtensionVsixLayoutDirectory)PT\CSharp\Web\</ProjectTemplateSubdirectory>
- <ZipLevel>6</ZipLevel>
</PropertyGroup>
- <Import Project="$(ProjectRoot)tools\$(ProductName).Versioning.targets"/>
<Import Project="$(ProjectRoot)tools\Documentation.targets"/>
<Import Project="$(ProjectRoot)tools\Publish.targets"/>
<Import Project="$(ProjectRoot)tools\Translation.targets"/>
- <UsingTask AssemblyFile="$(ProjectRoot)lib\MSBuild.Community.Tasks.dll" TaskName="Zip"/>
- <UsingTask AssemblyFile="$(ProjectRoot)lib\MSBuild.Community.Tasks.dll" TaskName="ILMerge"/>
- <UsingTask AssemblyFile="$(ProjectRoot)lib\MSBuild.Community.Tasks.dll" TaskName="NUnit" />
<ItemGroup>
<SampleProjects Include="$(ProjectRoot)samples\**\*.csproj;$(ProjectRoot)samples\**\*.vbproj" />
<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" />
+ <ProjectsToClean Include="
+ $(SolutionPath);
+ vsi\vsi.proj;
+ vsix\vsix.proj;
+ "/>
</ItemGroup>
<Target Name="Clean" DependsOnTargets="CleanDocumentation;UnpublishSamples;UnpublishDocumentation">
- <MSBuild Projects="$(SolutionPath)" Targets="Clean" />
+ <MSBuild Projects="@(ProjectsToClean)" Targets="Clean" BuildInParallel="$(BuildInParallel)" />
<ItemGroup>
<DirtyDirectories Include="
$(ProjectRoot)bin;
$(ProjectRoot)**\obj;
$(DropsRoot);
$(ProjectRoot)src\PrecompiledWeb;
- $(ProjectTemplatesLayoutPath);
" />
<DirtyDirectories Include="@(SampleDirectories->'%(FullPath)\bin')" />
<DirtyDirectories Include="@(SampleDirectories->'%(FullPath)\obj')" />
@@ -64,48 +43,27 @@
</Target>
<Target Name="BuildProduct" DependsOnTargets="SkipVerification">
- <MSBuild Projects="$(ProjectRoot)src\$(ProductName)\$(ProductName).csproj" />
+ <MSBuild Projects="$(ProjectRoot)src\$(ProductName)\$(ProductName).csproj" BuildInParallel="$(BuildInParallel)" />
</Target>
<Target Name="BuildTests" DependsOnTargets="SkipVerification">
- <MSBuild Projects="$(SolutionPath)" Targets="DotNetOpenAuth_Test;DotNetOpenAuth_TestWeb" />
+ <MSBuild Projects="$(SolutionPath)" Targets="DotNetOpenAuth_Test;DotNetOpenAuth_TestWeb" BuildInParallel="$(BuildInParallel)" />
</Target>
<Target Name="BuildSamples" DependsOnTargets="SkipVerification">
- <MSBuild Projects="@(SampleProjects)" />
- <MSBuild Projects="$(SolutionPath)" Targets="@(SampleSites)" />
+ <MSBuild Projects="@(SampleProjects)" BuildInParallel="$(BuildInParallel)" />
+ <MSBuild Projects="$(SolutionPath)" Targets="@(SampleSites)" BuildInParallel="$(BuildInParallel)" />
</Target>
<Target Name="Build" DependsOnTargets="SkipVerification">
- <MSBuild Projects="$(SolutionPath)" />
+ <MSBuild Projects="$(SolutionPath)" BuildInParallel="$(BuildInParallel)" />
</Target>
<Target Name="Rebuild" DependsOnTargets="SkipVerification">
- <MSBuild Projects="$(SolutionPath)" Targets="Rebuild" />
- </Target>
-
- <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 using key pair container $(KeyPairContainer)." />
- <ReSignDelaySignedAssemblies
- KeyContainer="$(KeyPairContainer)"
- Assemblies="@(DelaySignedAssemblies)"
- Condition="Exists(%(Identity))" />
+ <MSBuild Projects="$(SolutionPath)" Targets="Rebuild" BuildInParallel="$(BuildInParallel)" />
</Target>
- <Target Name="ToolsLayout" DependsOnTargets="GetBuildVersion;_SetDropProperties;BuildUnifiedProduct">
+ <Target Name="ToolsLayout" DependsOnTargets="BuildUnifiedProduct">
<PropertyGroup>
<ToolsDirectoryNoSlash>$(DropsRoot)$(ProductName)-Tools-$(BuildVersion)</ToolsDirectoryNoSlash>
<ToolsDirectory>$(ToolsDirectoryNoSlash)\</ToolsDirectory>
@@ -115,7 +73,7 @@
<ToolProjects Include="$(ProjectRoot)Samples\OpenIdOfflineProvider\OpenIdOfflineProvider.csproj" />
</ItemGroup>
- <MSBuild Projects="@(ToolProjects)" />
+ <MSBuild Projects="@(ToolProjects)" BuildInParallel="$(BuildInParallel)" />
<ItemGroup>
<OfflineProvider Include="
@@ -152,360 +110,6 @@
ZipLevel="$(ZipLevel)" />
</Target>
- <Target Name="BuildProjectTemplates">
- <!-- Deploy the latest SQL script first, so that the class library can embed the latest version. -->
- <MSBuild Projects="$(ProjectRoot)projecttemplates\RelyingPartyDatabase\RelyingPartyDatabase.dbproj" Targets="Build;Deploy" />
-
- <MSBuild Projects="@(ProjectTemplates)" />
- </Target>
-
- <Target Name="ProjectTemplatesLayout" DependsOnTargets="GetBuildVersion;BuildUnifiedProduct;ReSignDelaySignedAssemblies;BuildProjectTemplates;VsixManifestLayout">
- <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\**;
- $(ProjectRoot)projecttemplates\**\*.ldf;
- $(ProjectRoot)projecttemplates\**\*.mdf;
- "/>
- <_ProjectTemplatesTransformSource Include="@(ProjectTemplatesSource)" Condition="
- '%(Extension)' == '.cs'
- or '%(Extension)' == '.csproj'
- or '%(Extension)' == '.sql'
- or '%(Extension)' == '.config'
- or '%(Extension)' == '.Master'
- or '%(Extension)' == '.aspx'
- or '%(Extension)' == '.ascx'
- or '%(Extension)' == '.asax'
- or '%(Extension)' == '.ashx'
- ">
- <BeforeTokens>%(RecursiveDir)</BeforeTokens>
- <AfterTokens>$safeprojectname$</AfterTokens>
- <!-- Projects can get changed after the transform+copy operation, so don't skip copying them. -->
- <SkipUnchangedFiles Condition="'%(Extension)' != '.csproj'">true</SkipUnchangedFiles>
- <SkipUnchangedFiles Condition="'%(Extension)' == '.csproj'">false</SkipUnchangedFiles>
- </_ProjectTemplatesTransformSource>
- <ProjectTemplatesSource Remove="@(_ProjectTemplatesTransformSource)" />
-
- <ProjectTemplatesLayout Include="@(ProjectTemplatesSource->'$(ProjectTemplatesLayoutPath)%(RecursiveDir)%(FileName)%(Extension)')"/>
- <ProjectTemplatesTransformLayout Include="@(_ProjectTemplatesTransformSource->'$(ProjectTemplatesLayoutPath)%(RecursiveDir)%(FileName)%(Extension)')"/>
-
- <!-- Include the template icon -->
- <ProjectTemplatesSource Include="$(ProjectRoot)doc\logo\favicon.ico" />
- <ProjectTemplatesLayout Include="$(ProjectTemplatesLayoutPath)__TemplateIcon.ico" />
-
- <!-- Add external libraries -->
- <!-- Include the unified, signed version of the library -->
- <ProjectTemplateLibraries Include="$(ILMergeOutputAssembly)" />
- <ProjectTemplateLibraries Include="$(ILMergeOutputAssemblyDirectory)$(ProductName).pdb" />
- <ProjectTemplateLibraries Include="$(OutputPath)$(ProductName).xml" />
- <ProjectTemplateLibraries Include="$(OutputPath)$(ProductName).Contracts.dll" />
- <!-- ... and log4net -->
- <ProjectTemplateLibraries Include="$(ProjectRoot)lib\log4net.dll" />
- <ProjectTemplateLibraries Include="$(ProjectRoot)lib\log4net.xml" />
- <ProjectTemplateLibrariesTargets Include="@(ProjectTemplateLibraries->'$(ProjectTemplatesLayoutPath)RelyingPartyLogic\lib\%(FileName)%(Extension)')" />
-
- <ProjectTemplatesSource Include="@(ProjectTemplateLibraries)" />
- <ProjectTemplatesLayout Include="@(ProjectTemplateLibrariesTargets)" />
- <FixupReferenceAssemblies Include="@(ProjectTemplateLibrariesTargets)" Condition="'%(Extension)' == '.dll'" />
-
- <InjectedLibraryItems Include="@(ProjectTemplateLibrariesTargets->'lib\%(FileName)%(Extension)')" />
- <VSProjectTemplates Include="@(ProjectTemplatesLayout)" Condition="'%(Extension)' == '.vstemplate'" />
- </ItemGroup>
-
- <Trim Inputs="@(_ProjectTemplatesTransformSource)" MetadataName="BeforeTokens" AllAfter="\">
- <Output TaskParameter="Outputs" ItemName="ProjectTemplatesTransformSource" />
- </Trim>
- <!--<MSBuild Projects="@(ProjectTemplates)" />-->
- <Copy SourceFiles="@(ProjectTemplatesSource)" DestinationFiles="@(ProjectTemplatesLayout)" SkipUnchangedFiles="true" />
- <CopyWithTokenSubstitution SourceFiles="@(ProjectTemplatesTransformSource)" DestinationFiles="@(ProjectTemplatesTransformLayout)">
- <Output TaskParameter="CopiedFiles" ItemName="CopiedProjectTemplateFiles" />
- </CopyWithTokenSubstitution>
- <ChangeProjectReferenceToAssemblyReference
- Projects="@(CopiedProjectTemplateFiles)"
- Condition="'%(Extension)' == '.csproj'"
- ProjectReference="..\..\src\$(ProductName)\$(ProductName).csproj"
- Reference="Lib\$(ProductName).dll" />
- <FixupReferenceHintPaths
- Projects="@(CopiedProjectTemplateFiles)"
- Condition="'%(CopiedProjectTemplateFiles.Extension)' == '.csproj'"
- References="@(FixupReferenceAssemblies)"
- />
- <AddProjectItems
- Projects="@(CopiedProjectTemplateFiles)"
- Condition="'%(CopiedProjectTemplateFiles.FileName)%(CopiedProjectTemplateFiles.Extension)' == 'RelyingPartyLogic.csproj'"
- Items="@(InjectedLibraryItems)"
- />
- <MergeProjectWithVSTemplate
- ProjectItemTypes="@(VsTemplateProjectItemTypes)"
- ReplaceParametersExtensions="@(VsTemplateParameterReplaceExtensions)"
- Templates="@(VSProjectTemplates)"
- VsixManifest="@(ProjectTemplates2010TransformLayout)"
- EnsureMaxPath="235"
- Condition=" '%(ProjectTemplates2010TransformLayout.Extension)' == '.vsixmanifest' "
- >
- <Output TaskParameter="MaxPathAdjustedPaths" ItemName="ProjectItemShortPathAdjustments"/>
- </MergeProjectWithVSTemplate>
-
- <ItemGroup>
- <ProjectTemplateIntendedFiles Include="
- @(ProjectTemplatesLayout);
- @(ProjectTemplatesTransformLayout);
- %(ProjectItemShortPathAdjustments.ShortPath);
- " />
- <ProjectTemplateIntendedFiles Remove="@(ProjectItemShortPathAdjustments)" />
- </ItemGroup>
- <Purge Directories="$(ProjectTemplatesLayoutPath)"
- IntendedFiles="@(ProjectTemplateIntendedFiles)" />
- </Target>
-
- <Target Name="ProjectTemplates2008" DependsOnTargets="ProjectTemplatesLayout">
- <ItemGroup>
- <ProjectTemplates2008Source Include="$(ProjectTemplatesLayoutPath)**" />
- <ProjectTemplates2008Layout Include="@(ProjectTemplates2008Source->'$(VS2008ProjectTemplatesDirectory)%(RecursiveDir)%(FileName)%(Extension)')" />
- <ProjectTemplates2008Layout>
- <HardLink Condition=" '%(Extension)' != '.csproj' ">true</HardLink>
- </ProjectTemplates2008Layout>
-
- <VS2008ProjectTemplates Include="@(ProjectTemplates2008Layout)" Condition="'%(Extension)' == '.vstemplate'" />
- <TopLevelVS2008ProjectTemplates Include="@(VS2008ProjectTemplates)" Condition="'%(RootDir)%(Directory)' == '$(VS2008ProjectTemplatesDirectory)'" />
- <VS2008ProjectTemplateZipFiles Include="@(TopLevelVS2008ProjectTemplates->'%(RootDir)%(Directory)%(FileName).zip')" />
- </ItemGroup>
-
- <HardLinkCopy SourceFiles="@(ProjectTemplates2008Source)" DestinationFiles="@(ProjectTemplates2008Layout)" />
-
- <DowngradeProjects
- Projects="@(ProjectTemplates2008Layout)"
- Condition="'%(Extension)' == '.csproj'"
- DowngradeMvc2ToMvc1="true"
- />
-
- <Purge Directories="$(VS2008ProjectTemplatesDirectory)" IntendedFiles="@(ProjectTemplates2008Layout)" />
-
- <DiscoverProjectTemplates TopLevelTemplates="@(TopLevelVS2008ProjectTemplates)">
- <Output TaskParameter="ProjectTemplates" ItemName="SubVS2008Templates" />
- <Output TaskParameter="ProjectTemplateContents" ItemName="VS2008TemplateItemContents" />
- </DiscoverProjectTemplates>
-
- <ItemGroup>
- <!-- Include in each template .zip file the top-level .vstemplate file itself. -->
- <VS2008ProjectTemplateContents Include="@(TopLevelVS2008ProjectTemplates)">
- <ZipFile>$(ProjectTemplatesVsiDirectory)%(FileName).zip</ZipFile>
- <WorkingDirectory>$(VS2008ProjectTemplatesDirectory)</WorkingDirectory>
- </VS2008ProjectTemplateContents>
-
- <!-- Now throw in all the files in each of the project-level template's directories and their children. -->
- <VS2008ProjectTemplateContents Include="@(VS2008TemplateItemContents)">
- <ZipFile>$(ProjectTemplatesVsiDirectory)%(VS2008TemplateItemContents.TopLevelTemplateFileName).zip</ZipFile>
- <WorkingDirectory>$(VS2008ProjectTemplatesDirectory)</WorkingDirectory>
- </VS2008ProjectTemplateContents>
-
- <!-- Include the template icon for each .zip file. -->
- <VS2008ProjectTemplateContents Include="@(TopLevelVS2008ProjectTemplates->'$(VS2008ProjectTemplatesDirectory)__TemplateIcon.ico')">
- <ZipFile>$(ProjectTemplatesVsiDirectory)%(TopLevelVS2008ProjectTemplates.FileName).zip</ZipFile>
- <WorkingDirectory>$(VS2008ProjectTemplatesDirectory)</WorkingDirectory>
- </VS2008ProjectTemplateContents>
- </ItemGroup>
-
- <Zip
- Files="@(VS2008ProjectTemplateContents)"
- ZipFileName="%(VS2008ProjectTemplateContents.ZipFile)"
- WorkingDirectory="%(VS2008ProjectTemplateContents.WorkingDirectory)"
- ZipLevel="$(ZipLevel)"
- />
- </Target>
-
- <Target Name="ProjectTemplates2010" DependsOnTargets="ProjectTemplatesLayout">
- <ItemGroup>
- <ProjectTemplates2010Source Include="$(ProjectTemplatesLayoutPath)**" />
- <ProjectTemplates2010Layout Include="@(ProjectTemplates2010Source->'$(VS2010ProjectTemplatesDirectory)%(RecursiveDir)%(FileName)%(Extension)')" />
- <ProjectTemplates2010Layout>
- <HardLink Condition=" '%(Extension)' != '.csproj' ">true</HardLink>
- </ProjectTemplates2010Layout>
-
- <VS2010ProjectTemplates Include="@(ProjectTemplates2010Layout)" Condition="'%(Extension)' == '.vstemplate'" />
- <TopLevelVS2010ProjectTemplates Include="@(VS2010ProjectTemplates)" Condition="'%(RootDir)%(Directory)' == '$(VS2010ProjectTemplatesDirectory)'" />
- <VS2010ProjectTemplateZipFiles Include="@(TopLevelVS2010ProjectTemplates->'%(RootDir)%(Directory)%(FileName).zip')" />
- </ItemGroup>
-
- <HardLinkCopy SourceFiles="@(ProjectTemplates2010Source)" DestinationFiles="@(ProjectTemplates2010Layout)" />
-
- <Purge Directories="$(VS2010ProjectTemplatesDirectory)" IntendedFiles="@(ProjectTemplates2010Layout)" />
-
- <DiscoverProjectTemplates TopLevelTemplates="@(TopLevelVS2010ProjectTemplates)">
- <Output TaskParameter="ProjectTemplates" ItemName="SubVS2010Templates" />
- <Output TaskParameter="ProjectTemplateContents" ItemName="VS2010TemplateItemContents" />
- </DiscoverProjectTemplates>
-
- <ItemGroup>
- <!-- Include in each template .zip file the top-level .vstemplate file itself. -->
- <VS2010ProjectTemplateContents Include="@(TopLevelVS2010ProjectTemplates)">
- <ZipFile>$(ProjectTemplateSubdirectory)%(FileName).zip</ZipFile>
- <WorkingDirectory>$(VS2010ProjectTemplatesDirectory)</WorkingDirectory>
- </VS2010ProjectTemplateContents>
-
- <!-- Now throw in all the files in each of the project-level template's directories and their children. -->
- <VS2010ProjectTemplateContents Include="@(VS2010TemplateItemContents)">
- <ZipFile>$(ProjectTemplateSubdirectory)%(VS2010TemplateItemContents.TopLevelTemplateFileName).zip</ZipFile>
- <WorkingDirectory>$(VS2010ProjectTemplatesDirectory)</WorkingDirectory>
- </VS2010ProjectTemplateContents>
-
- <!-- Include the template icon for each .zip file. -->
- <VS2010ProjectTemplateContents Include="@(TopLevelVS2010ProjectTemplates->'$(VS2010ProjectTemplatesDirectory)__TemplateIcon.ico')">
- <ZipFile>$(ProjectTemplateSubdirectory)%(TopLevelVS2010ProjectTemplates.FileName).zip</ZipFile>
- <WorkingDirectory>$(VS2010ProjectTemplatesDirectory)</WorkingDirectory>
- </VS2010ProjectTemplateContents>
-
- <ExtensionVsixContents Include="%(VS2010ProjectTemplateContents.ZipFile)" />
- </ItemGroup>
-
- <Zip
- Files="@(VS2010ProjectTemplateContents)"
- ZipFileName="%(VS2010ProjectTemplateContents.ZipFile)"
- WorkingDirectory="%(VS2010ProjectTemplateContents.WorkingDirectory)"
- ZipLevel="$(ZipLevel)"
- />
- </Target>
-
- <Target Name="vsi" DependsOnTargets="ProjectTemplates2008;_SetDropProperties">
- <PropertyGroup>
- <ProjectTemplatesVsi>$(DropDirectoryNoSlash).vsi</ProjectTemplatesVsi>
- </PropertyGroup>
- <ItemGroup>
- <VsiTransformSource Include="$(ProjectRoot)vsi\*.vscontent">
- <BeforeTokens>$version$</BeforeTokens>
- <AfterTokens>$(BuildVersion)</AfterTokens>
- <SkipUnchangedFiles>false</SkipUnchangedFiles>
- </VsiTransformSource>
- <VsiTransformLayout Include="@(VsiTransformSource->'$(ProjectTemplatesVsiDirectory)%(RecursiveDir)%(FileName)%(Extension)')" />
-
- <ProjectTemplateVsiContents Include="
- $(ProjectTemplatesVsiDirectory)*.zip;
- @(VsiTransformLayout);
- " />
- </ItemGroup>
-
- <CopyWithTokenSubstitution SourceFiles="@(VsiTransformSource)" DestinationFiles="@(VsiTransformLayout)" />
-
- <Zip
- Files="@(ProjectTemplateVsiContents)"
- ZipFileName="$(ProjectTemplatesVsi)"
- WorkingDirectory="$(ProjectTemplatesVsiDirectory)"
- ZipLevel="$(ZipLevel)"
- />
- </Target>
-
- <Target Name="VsixManifestLayout">
- <ItemGroup>
- <ProjectTemplates2010TransformSource Include="
- $(ProjectRoot)vsix\extension.vsixmanifest;
- $(ProjectRoot)LICENSE.txt;
- ">
- <BeforeTokens>$version$</BeforeTokens>
- <AfterTokens>$(BuildVersion)</AfterTokens>
- <SkipUnchangedFiles>false</SkipUnchangedFiles>
- </ProjectTemplates2010TransformSource>
- <ProjectTemplates2010TransformLayout Include="@(ProjectTemplates2010TransformSource->'$(ExtensionVsixLayoutDirectory)%(RecursiveDir)%(FileName)%(Extension)')" />
- </ItemGroup>
- <CopyWithTokenSubstitution SourceFiles="@(ProjectTemplates2010TransformSource)" DestinationFiles="@(ProjectTemplates2010TransformLayout)" />
- </Target>
-
- <Target Name="VsixLayout" DependsOnTargets="ProjectTemplates2010;VsixManifestLayout">
- <ItemGroup>
- <ExtensionVsixSources Include="
- $(ProjectRoot)vsix\*;
- " Exclude="
- $(ProjectRoot)vsix\extension.vsixmanifest;
- ">
- <SkipUnchangedFiles>true</SkipUnchangedFiles>
- </ExtensionVsixSources>
-
- <ExtensionVsixTargets Include="@(ExtensionVsixSources->'$(ExtensionVsixLayoutDirectory)%(FileName)%(Extension)')" />
-
- <ExtensionVsixContents Include="
- @(ExtensionVsixTargets);
- @(ProjectTemplates2010TransformLayout);
- "/>
- </ItemGroup>
-
- <Copy SourceFiles="@(ExtensionVsixSources)" DestinationFiles="@(ExtensionVsixTargets)" SkipUnchangedFiles="true" />
- <Purge Directories="$(ExtensionVsixLayoutDirectory)" IntendedFiles="@(ExtensionVsixContents)" />
-
- <!-- Build individual VSIX files for each project template for the Visual Studio Gallery,
- which only allows one project template per VSIX. -->
- <ItemGroup>
- <VSGalleryProjectTemplates Include="$(ProjectTemplateSubdirectory)*.zip" />
- <VSGalleryVsixRawSources Include="$(ExtensionVsixLayoutDirectory)**"
- Exclude="$(ProjectTemplateSubdirectory)*.zip;$(ExtensionVsixLayoutDirectory)*.vsixmanifest">
- <VSGalleryVsix>$(DropsRoot)$(ProductName) %(VSGalleryProjectTemplates.FileName)-$(BuildVersion).vsix</VSGalleryVsix>
- <TopLevelTemplate>%(VSGalleryProjectTemplates.FileName)</TopLevelTemplate>
- </VSGalleryVsixRawSources>
- <VSGalleryVsixSources Include="@(VSGalleryVsixRawSources)">
- <TargetPath>$(IntermediatePath)%(TopLevelTemplate).vsix\%(FileName)%(Extension)</TargetPath>
- </VSGalleryVsixSources>
-
- <VSGalleryVsixZipSources Include="$(ExtensionVsixLayoutDirectory)**\*.zip"/>
- <VSGalleryVsixSources Include="@(VSGalleryVsixZipSources)">
- <TopLevelTemplate>%(FileName)</TopLevelTemplate>
- <VSGalleryVsix>$(DropsRoot)$(ProductName) %(FileName)-$(BuildVersion).vsix</VSGalleryVsix>
- <TargetPath>$(IntermediatePath)%(FileName).vsix\%(RecursiveDir)%(FileName)%(Extension)</TargetPath>
- </VSGalleryVsixSources>
-
- <VSGalleryVsixSources Include="@(VSGalleryProjectTemplates->'$(ProjectRoot)projecttemplates\%(FileName).vsixmanifest')">
- <VSGalleryVsix>$(DropsRoot)$(ProductName) %(VSGalleryProjectTemplates.FileName)-$(BuildVersion).vsix</VSGalleryVsix>
- <TopLevelTemplate>%(VSGalleryProjectTemplates.FileName)</TopLevelTemplate>
- <TargetPath>$(IntermediatePath)%(VSGalleryProjectTemplates.FileName).vsix\extension.vsixmanifest</TargetPath>
- <Transform>true</Transform>
- <BeforeTokens>$version$</BeforeTokens>
- <AfterTokens>$(BuildVersion)</AfterTokens>
- <SkipUnchangedFiles>false</SkipUnchangedFiles>
- </VSGalleryVsixSources>
-
- <VSGalleryVsixTargets Include="@(VSGalleryVsixSources->'%(TargetPath)')">
- <WorkingDirectory>$(IntermediatePath)%(TopLevelTemplate).vsix</WorkingDirectory>
- </VSGalleryVsixTargets>
- <VSGalleryVsixPathsToPurge Include="@(VSGalleryProjectTemplates->'$(IntermediatePath)%(FileName).vsix')"/>
- </ItemGroup>
- <HardLinkCopy
- SourceFiles="@(VSGalleryVsixSources)"
- DestinationFiles="%(VSGalleryVsixSources.TargetPath)"
- Condition=" '%(VSGalleryVsixSources.Transform)' != 'true' "/>
- <CopyWithTokenSubstitution
- SourceFiles="@(VSGalleryVsixSources)"
- DestinationFiles="%(VSGalleryVsixSources.TargetPath)"
- Condition=" '%(VSGalleryVsixSources.Transform)' == 'true' "/>
- <Purge
- Directories="@(VSGalleryVsixPathsToPurge)"
- IntendedFiles="@(VSGalleryVsixTargets)" />
- </Target>
-
- <Target Name="vsix" DependsOnTargets="VsixLayout;_SetDropProperties">
- <PropertyGroup>
- <ExtensionVsix>$(DropsRoot)$(ProductName) SDK-$(BuildVersion).vsix</ExtensionVsix>
- </PropertyGroup>
- <Zip
- Files="@(ExtensionVsixContents)"
- ZipFileName="$(ExtensionVsix)"
- WorkingDirectory="$(ExtensionVsixLayoutDirectory)"
- ZipLevel="$(ZipLevel)"
- />
-
- <Zip
- Files="@(VSGalleryVsixTargets)"
- ZipFileName="%(VSGalleryVsixTargets.VSGalleryVsix)"
- WorkingDirectory="%(VSGalleryVsixTargets.WorkingDirectory)"
- ZipLevel="$(ZipLevel)"
- />
- </Target>
-
<Target Name="Documentation" DependsOnTargets="BuildProduct;Chm" Condition="'$(NoDocumentation)' != 'true'">
</Target>
@@ -522,17 +126,7 @@
ExcludeCategory="$(NUnitExcludeCategories)"/>
</Target>
- <Target Name="_SetDropProperties" DependsOnTargets="GetBuildVersion">
- <!-- This target is necessary because PropertyGroups within the same Target as
- where CallTarget is fired do NOT affect those called targets. -->
- <!-- The rest of these are here so that other DependsOn targets have access to these properties. -->
- <PropertyGroup>
- <DropDirectoryNoSlash>$(DropsRoot)$(ProductName)-$(BuildVersion)</DropDirectoryNoSlash>
- <DropDirectory>$(DropDirectoryNoSlash)\</DropDirectory>
- </PropertyGroup>
- </Target>
-
- <Target Name="DropLayout" DependsOnTargets="GetBuildVersion;_SetDropProperties;BuildUnifiedProduct;ReSignDelaySignedAssemblies;BuildSamples;vsi;vsix;Documentation">
+ <Target Name="DropLayout" DependsOnTargets="BuildUnifiedProduct;ReSignDelaySignedAssemblies;BuildSamples;vsi;vsix;Documentation">
<PropertyGroup>
<DropBinDirectory>$(DropDirectory)Bin\</DropBinDirectory>
<DropLibDirectory>$(DropDirectory)Lib\</DropLibDirectory>
@@ -656,4 +250,6 @@
<Target Name="Nightly" DependsOnTargets="Drop;Tools;PublishSamples;PublishDocumentation">
</Target>
+
+ <Import Project="$(ProjectRoot)DotNetOpenAuth.automated.targets"/>
</Project>
diff --git a/projecttemplates/MvcRelyingParty.vsixmanifest b/projecttemplates/MvcRelyingParty.vsixmanifest
index 023e42a..f401277 100644
--- a/projecttemplates/MvcRelyingParty.vsixmanifest
+++ b/projecttemplates/MvcRelyingParty.vsixmanifest
@@ -1,7 +1,7 @@
<?xml version="1.0"?>
<Vsix xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" Version="1.0" xmlns="http://schemas.microsoft.com/developer/vsx-schema/2010">
<Identifier Id="DotNetOpenAuth.MvcRelyingParty.15E8EC96-BDC3-47E2-8BB1-0483E9D16705">
- <Name>MvcRelyingParty</Name>
+ <Name>ASP.NET MVC OpenID web site (C#)</Name>
<Author>DotNetOpenAuth</Author>
<Version>$version$</Version>
<Description>Resources for developing applications that use OpenID, OAuth, and InfoCard.</Description>
diff --git a/projecttemplates/RelyingPartyLogic/RelyingPartyLogic.csproj b/projecttemplates/RelyingPartyLogic/RelyingPartyLogic.csproj
index 9f58bfa..07f267d 100644
--- a/projecttemplates/RelyingPartyLogic/RelyingPartyLogic.csproj
+++ b/projecttemplates/RelyingPartyLogic/RelyingPartyLogic.csproj
@@ -143,6 +143,12 @@
<Project>{3191B653-F76D-4C1A-9A5A-347BC3AAAAB7}</Project>
<Name>DotNetOpenAuth</Name>
</ProjectReference>
+ <ProjectReference Include="..\RelyingPartyDatabase\RelyingPartyDatabase.dbproj">
+ <Name>RelyingPartyDatabase</Name>
+ <!-- Deploy the latest SQL script first, so that this project can embed the latest version. -->
+ <Targets>Build;Deploy</Targets>
+ <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
+ </ProjectReference>
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="CreateDatabase.sql" />
diff --git a/projecttemplates/WebFormsRelyingParty.vsixmanifest b/projecttemplates/WebFormsRelyingParty.vsixmanifest
index bd8eb13..75a3646 100644
--- a/projecttemplates/WebFormsRelyingParty.vsixmanifest
+++ b/projecttemplates/WebFormsRelyingParty.vsixmanifest
@@ -1,7 +1,7 @@
<?xml version="1.0"?>
<Vsix xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" Version="1.0" xmlns="http://schemas.microsoft.com/developer/vsx-schema/2010">
<Identifier Id="DotNetOpenAuth.WebFormsRelyingParty.FB0AB0B2-B447-4F10-A03E-F488DDAF024A">
- <Name>WebFormsRelyingParty</Name>
+ <Name>ASP.NET OpenID web site (C#)</Name>
<Author>DotNetOpenAuth</Author>
<Version>$version$</Version>
<Description>Resources for developing applications that use OpenID, OAuth, and InfoCard.</Description>
diff --git a/projecttemplates/projecttemplates.proj b/projecttemplates/projecttemplates.proj
new file mode 100644
index 0000000..22b166b
--- /dev/null
+++ b/projecttemplates/projecttemplates.proj
@@ -0,0 +1,143 @@
+<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <Import Project="$(MSBuildProjectDirectory)\..\tools\DotNetOpenAuth.automated.props"/>
+
+ <PropertyGroup>
+ <ProjectTemplatesLayoutPath>$(IntermediatePath)projecttemplates\</ProjectTemplatesLayoutPath>
+ <ExtensionVsixLayoutDirectory>$(IntermediatePath)Vsix\</ExtensionVsixLayoutDirectory>
+
+ <LayoutDependsOn>
+ BuildUnifiedProduct;
+ ReSignDelaySignedAssemblies;
+ DeploySql;
+ </LayoutDependsOn>
+
+ <!-- We don't need to build the project templates, but to make sure we're not shipping junk,
+ we default to building them as a validation step. -->
+ <LayoutDependsOn Condition=" '$(Validation)' == 'Full' ">
+ Validate;
+ $(LayoutDependsOn);
+ </LayoutDependsOn>
+ </PropertyGroup>
+
+ <ItemGroup>
+ <ProjectTemplates Include="**\*.*proj" Exclude="$(MSBuildThisFileDirectory)$(MSBuildThisFile)" />
+ </ItemGroup>
+
+ <Target Name="Validate">
+ <MSBuild Projects="@(ProjectTemplates)" BuildInParallel="$(BuildInParallel)" />
+ </Target>
+
+ <Target Name="DeploySql">
+ <!-- This causes the SQL script that generates the database to be deployed to the RelyingPartyLogic class library. -->
+ <MSBuild Projects="RelyingPartyDatabase\RelyingPartyDatabase.dbproj" Targets="Build;Deploy" BuildInParallel="$(BuildInParallel)" />
+ </Target>
+
+ <Target Name="Layout" DependsOnTargets="$(LayoutDependsOn)">
+ <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\**;
+ $(ProjectRoot)projecttemplates\**\*.ldf;
+ $(ProjectRoot)projecttemplates\**\*.mdf;
+ $(ProjectRoot)projecttemplates\**\*.vsixmanifest;
+ "/>
+ <ProjectTemplatesSource Remove="@(ProjectTemplatesSource)" Condition=" '%(FullPath)' == '$(MSBuildThisFileDirectory)$(MSBuildThisFile)' " />
+ <_ProjectTemplatesTransformSource Include="@(ProjectTemplatesSource)" Condition="
+ '%(Extension)' == '.cs'
+ or '%(Extension)' == '.csproj'
+ or '%(Extension)' == '.sql'
+ or '%(Extension)' == '.config'
+ or '%(Extension)' == '.Master'
+ or '%(Extension)' == '.aspx'
+ or '%(Extension)' == '.ascx'
+ or '%(Extension)' == '.asax'
+ or '%(Extension)' == '.ashx'
+ ">
+ <BeforeTokens>%(RecursiveDir)</BeforeTokens>
+ <AfterTokens>$safeprojectname$</AfterTokens>
+ <!-- Projects can get changed after the transform+copy operation, so don't skip copying them. -->
+ <SkipUnchangedFiles Condition="'%(Extension)' != '.csproj'">true</SkipUnchangedFiles>
+ <SkipUnchangedFiles Condition="'%(Extension)' == '.csproj'">false</SkipUnchangedFiles>
+ </_ProjectTemplatesTransformSource>
+ <ProjectTemplatesSource Remove="@(_ProjectTemplatesTransformSource)" />
+
+ <ProjectTemplatesLayout Include="@(ProjectTemplatesSource->'$(ProjectTemplatesLayoutPath)%(RecursiveDir)%(FileName)%(Extension)')"/>
+ <ProjectTemplatesTransformLayout Include="@(_ProjectTemplatesTransformSource->'$(ProjectTemplatesLayoutPath)%(RecursiveDir)%(FileName)%(Extension)')"/>
+
+ <!-- Include the template icon -->
+ <ProjectTemplatesSource Include="$(ProjectRoot)doc\logo\favicon.ico" />
+ <ProjectTemplatesLayout Include="$(ProjectTemplatesLayoutPath)__TemplateIcon.ico" />
+
+ <!-- Add external libraries -->
+ <!-- Include the unified, signed version of the library -->
+ <ProjectTemplateLibraries Include="$(ILMergeOutputAssembly)" />
+ <ProjectTemplateLibraries Include="$(ILMergeOutputAssemblyDirectory)$(ProductName).pdb" />
+ <ProjectTemplateLibraries Include="$(OutputPath)$(ProductName).xml" />
+ <ProjectTemplateLibraries Include="$(OutputPath)$(ProductName).Contracts.dll" />
+ <!-- ... and log4net -->
+ <ProjectTemplateLibraries Include="$(ProjectRoot)lib\log4net.dll" />
+ <ProjectTemplateLibraries Include="$(ProjectRoot)lib\log4net.xml" />
+ <ProjectTemplateLibrariesTargets Include="@(ProjectTemplateLibraries->'$(ProjectTemplatesLayoutPath)RelyingPartyLogic\lib\%(FileName)%(Extension)')" />
+
+ <ProjectTemplatesSource Include="@(ProjectTemplateLibraries)" />
+ <ProjectTemplatesLayout Include="@(ProjectTemplateLibrariesTargets)" />
+ <FixupReferenceAssemblies Include="@(ProjectTemplateLibrariesTargets)" Condition="'%(Extension)' == '.dll'" />
+
+ <InjectedLibraryItems Include="@(ProjectTemplateLibrariesTargets->'lib\%(FileName)%(Extension)')" />
+ <VSProjectTemplates Include="@(ProjectTemplatesLayout)" Condition="'%(Extension)' == '.vstemplate'" />
+ </ItemGroup>
+
+ <Trim Inputs="@(_ProjectTemplatesTransformSource)" MetadataName="BeforeTokens" AllAfter="\">
+ <Output TaskParameter="Outputs" ItemName="ProjectTemplatesTransformSource" />
+ </Trim>
+ <!--<MSBuild Projects="@(ProjectTemplates)" />-->
+ <Copy SourceFiles="@(ProjectTemplatesSource)" DestinationFiles="@(ProjectTemplatesLayout)" SkipUnchangedFiles="true" />
+ <CopyWithTokenSubstitution SourceFiles="@(ProjectTemplatesTransformSource)" DestinationFiles="@(ProjectTemplatesTransformLayout)">
+ <Output TaskParameter="CopiedFiles" ItemName="CopiedProjectTemplateFiles" />
+ </CopyWithTokenSubstitution>
+ <ChangeProjectReferenceToAssemblyReference
+ Projects="@(CopiedProjectTemplateFiles)"
+ Condition="'%(Extension)' == '.csproj'"
+ ProjectReference="..\..\src\$(ProductName)\$(ProductName).csproj"
+ Reference="Lib\$(ProductName).dll" />
+ <FixupReferenceHintPaths
+ Projects="@(CopiedProjectTemplateFiles)"
+ Condition="'%(CopiedProjectTemplateFiles.Extension)' == '.csproj'"
+ References="@(FixupReferenceAssemblies)"
+ />
+ <AddProjectItems
+ Projects="@(CopiedProjectTemplateFiles)"
+ Condition="'%(CopiedProjectTemplateFiles.FileName)%(CopiedProjectTemplateFiles.Extension)' == 'RelyingPartyLogic.csproj'"
+ Items="@(InjectedLibraryItems)"
+ />
+ <MergeProjectWithVSTemplate
+ ProjectItemTypes="@(VsTemplateProjectItemTypes)"
+ ReplaceParametersExtensions="@(VsTemplateParameterReplaceExtensions)"
+ Templates="@(VSProjectTemplates)"
+ >
+ <Output TaskParameter="MaxPathAdjustedPaths" ItemName="ProjectItemShortPathAdjustments"/>
+ </MergeProjectWithVSTemplate>
+
+ <ItemGroup>
+ <ProjectTemplateIntendedFiles Include="
+ @(ProjectTemplatesLayout);
+ @(ProjectTemplatesTransformLayout);
+ %(ProjectItemShortPathAdjustments.ShortPath);
+ " />
+ <ProjectTemplateIntendedFiles Remove="@(ProjectItemShortPathAdjustments)" />
+ </ItemGroup>
+ <Purge Directories="$(ProjectTemplatesLayoutPath)"
+ IntendedFiles="@(ProjectTemplateIntendedFiles)" />
+ </Target>
+
+ <Import Project="$(ProjectRoot)tools\DotNetOpenAuth.automated.targets"/>
+</Project> \ No newline at end of file
diff --git a/src/DotNetOpenAuth.BuildTasks/DotNetOpenAuth.BuildTasks.sln b/src/DotNetOpenAuth.BuildTasks/DotNetOpenAuth.BuildTasks.sln
index 34a8e46..1f2cee8 100644
--- a/src/DotNetOpenAuth.BuildTasks/DotNetOpenAuth.BuildTasks.sln
+++ b/src/DotNetOpenAuth.BuildTasks/DotNetOpenAuth.BuildTasks.sln
@@ -4,11 +4,16 @@ Microsoft Visual Studio Solution File, Format Version 11.00
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{ABBE14A3-0404-4123-9093-E598C3DD3E9B}"
ProjectSection(SolutionItems) = preProject
..\..\build.proj = ..\..\build.proj
+ ..\..\tools\DotNetOpenAuth.automated.props = ..\..\tools\DotNetOpenAuth.automated.props
+ ..\..\tools\DotNetOpenAuth.automated.targets = ..\..\tools\DotNetOpenAuth.automated.targets
..\..\lib\DotNetOpenAuth.BuildTasks.targets = ..\..\lib\DotNetOpenAuth.BuildTasks.targets
..\..\tools\DotNetOpenAuth.Common.Settings.targets = ..\..\tools\DotNetOpenAuth.Common.Settings.targets
..\..\tools\DotNetOpenAuth.props = ..\..\tools\DotNetOpenAuth.props
..\..\tools\DotNetOpenAuth.targets = ..\..\tools\DotNetOpenAuth.targets
..\..\tools\DotNetOpenAuth.Versioning.targets = ..\..\tools\DotNetOpenAuth.Versioning.targets
+ ..\..\projecttemplates\projecttemplates.proj = ..\..\projecttemplates\projecttemplates.proj
+ ..\..\vsi\vsi.proj = ..\..\vsi\vsi.proj
+ ..\..\vsix\vsix.proj = ..\..\vsix\vsix.proj
EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DotNetOpenAuth.BuildTasks", "DotNetOpenAuth.BuildTasks.csproj", "{AC231A51-EF60-437C-A33F-AF8ADEB8EB74}"
diff --git a/src/DotNetOpenAuth.BuildTasks/MergeProjectWithVSTemplate.cs b/src/DotNetOpenAuth.BuildTasks/MergeProjectWithVSTemplate.cs
index c24d634..f166e63 100644
--- a/src/DotNetOpenAuth.BuildTasks/MergeProjectWithVSTemplate.cs
+++ b/src/DotNetOpenAuth.BuildTasks/MergeProjectWithVSTemplate.cs
@@ -8,6 +8,7 @@ namespace DotNetOpenAuth.BuildTasks {
using System;
using System.Collections.Generic;
using System.Diagnostics.Contracts;
+ using System.Globalization;
using System.IO;
using System.Linq;
using System.Text;
@@ -15,17 +16,16 @@ namespace DotNetOpenAuth.BuildTasks {
using Microsoft.Build.BuildEngine;
using Microsoft.Build.Framework;
using Microsoft.Build.Utilities;
- using System.Globalization;
public class MergeProjectWithVSTemplate : Task {
internal const string VSTemplateNamespace = "http://schemas.microsoft.com/developer/vstemplate/2005";
-
+
internal const string VsixNamespace = "http://schemas.microsoft.com/developer/vsx-schema/2010";
/// <summary>
/// A dictionary where the key is the project name and the value is the path contribution.
/// </summary>
- private Dictionary<string, string> vsixContributionToPath = new Dictionary<string,string>(StringComparer.OrdinalIgnoreCase);
+ private Dictionary<string, string> vsixContributionToPath = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);
[Required]
public string[] ProjectItemTypes { get; set; }
@@ -66,8 +66,9 @@ namespace DotNetOpenAuth.BuildTasks {
/// </summary>
public override bool Execute() {
var shortenedItems = new List<ITaskItem>();
+ int uniqueItemCounter = 0;
- foreach(ITaskItem sourceTemplateTaskItem in this.Templates) {
+ foreach (ITaskItem sourceTemplateTaskItem in this.Templates) {
var template = XElement.Load(sourceTemplateTaskItem.ItemSpec);
var templateContentElement = template.Element(XName.Get("TemplateContent", VSTemplateNamespace));
var projectElement = templateContentElement.Element(XName.Get("Project", VSTemplateNamespace));
@@ -85,11 +86,15 @@ namespace DotNetOpenAuth.BuildTasks {
// Collect the project items from the project that are appropriate
// to include in the .vstemplate file.
var itemsByFolder = from item in sourceProject.EvaluatedItems.Cast<BuildItem>()
- where this.ProjectItemTypes.Contains(item.Name)
- orderby item.Include
- group item by Path.GetDirectoryName(item.Include);
+ where this.ProjectItemTypes.Contains(item.Name)
+ orderby item.Include
+ group item by Path.GetDirectoryName(item.Include);
foreach (var folder in itemsByFolder) {
- XElement parentNode = FindOrCreateParent(folder.Key, projectElement);
+ XElement parentNode = projectElement;
+ if (folder.Key.Length > 0) {
+ parentNode = FindOrCreateParent((uniqueItemCounter++).ToString("x"), projectElement);
+ parentNode.SetAttributeValue("TargetFolderName", folder.Key);
+ }
foreach (var item in folder) {
bool replaceParameters = this.ReplaceParametersExtensions.Contains(Path.GetExtension(item.Include));
@@ -158,7 +163,7 @@ namespace DotNetOpenAuth.BuildTasks {
return fileName;
}
- string hashSuffix = Utilities.SuppressCharacters(fileName.GetHashCode().ToString("x"), Path.GetInvalidFileNameChars(), '_');
+ string hashSuffix = Utilities.SuppressCharacters(Math.Abs(fileName.GetHashCode() % 0xfff).ToString("x"), Path.GetInvalidFileNameChars(), '_');
string fileNameWithoutExtension = Path.GetFileNameWithoutExtension(fileName);
string extension = Path.GetExtension(fileName);
string hashSuffixWithExtension = hashSuffix + extension;
@@ -203,7 +208,7 @@ namespace DotNetOpenAuth.BuildTasks {
string subPath;
if (!vsixContributionToPath.TryGetValue(projectName, out subPath)) {
if (this.VsixManifest == null) {
- this.Log.LogError("The task parameter VsixManifest is required but missing.");
+ this.Log.LogError("The task parameter VsixManifests is required but missing.");
}
var vsixDocument = XDocument.Load(this.VsixManifest.ItemSpec);
XElement vsix = vsixDocument.Element(XName.Get("Vsix", VsixNamespace));
diff --git a/src/DotNetOpenAuth/DotNetOpenAuth.csproj b/src/DotNetOpenAuth/DotNetOpenAuth.csproj
index 3bfecae..9f29d4b 100644
--- a/src/DotNetOpenAuth/DotNetOpenAuth.csproj
+++ b/src/DotNetOpenAuth/DotNetOpenAuth.csproj
@@ -728,6 +728,20 @@ http://opensource.org/licenses/ms-pl.html
</BootstrapperPackage>
<Content Include="DotNetOpenAuth.ico" />
</ItemGroup>
+
+ <Target Name="BuildUnifiedProduct"
+ DependsOnTargets="Build"
+ Inputs="@(ILMergeInputAssemblies)"
+ Outputs="$(ILMergeOutputAssembly)">
+ <MakeDir Directories="$(ILMergeOutputAssemblyDirectory)" />
+ <ILMerge ExcludeFile="$(ProjectRoot)ILMergeInternalizeExceptions.txt"
+ InputAssemblies="@(ILMergeInputAssemblies)"
+ OutputFile="$(ILMergeOutputAssembly)"
+ KeyFile="$(PublicKeyFile)"
+ DelaySign="true"
+ />
+ </Target>
+
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<Import Project="$(ProjectRoot)tools\DotNetOpenAuth.targets" />
</Project>
diff --git a/tools/DotNetOpenAuth.automated.props b/tools/DotNetOpenAuth.automated.props
new file mode 100644
index 0000000..f66c1fe
--- /dev/null
+++ b/tools/DotNetOpenAuth.automated.props
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0">
+ <Import Project="DotNetOpenAuth.props"/>
+
+ <PropertyGroup>
+ <AutomatedBuild>true</AutomatedBuild>
+ <SolutionPath>$(ProjectRoot)src\$(ProductName).sln</SolutionPath>
+ <BuildInParallel Condition=" '$(BuildInParallel)' == '' ">true</BuildInParallel>
+ <!-- Validation controls whether extra builds are done in order to fully validate what we're distributing,
+ even if we're not distributing the built bits (as is the case for project templates). -->
+ <Validation Condition=" '$(Validation)' == '' ">Full</Validation>
+ </PropertyGroup>
+</Project>
diff --git a/tools/DotNetOpenAuth.automated.targets b/tools/DotNetOpenAuth.automated.targets
new file mode 100644
index 0000000..c6f34cd
--- /dev/null
+++ b/tools/DotNetOpenAuth.automated.targets
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0" InitialTargets="_SetDropProperties">
+ <Import Project="$(ProjectRoot)tools\$(ProductName).targets"/>
+ <UsingTask AssemblyFile="$(ProjectRoot)lib\MSBuild.Community.Tasks.dll" TaskName="Zip"/>
+ <UsingTask AssemblyFile="$(ProjectRoot)lib\MSBuild.Community.Tasks.dll" TaskName="NUnit" />
+
+ <Target Name="Rebuild" DependsOnTargets="Clean;Build"/>
+
+ <Target Name="Clean">
+ <Delete Files="@(FilesToClean)" />
+ <RemoveDir Directories="@(DirectoriesToClean)" />
+ </Target>
+
+ <Target Name="_SetDropProperties" DependsOnTargets="GetBuildVersion">
+ <!-- This target is necessary because PropertyGroups within the same Target as
+ where CallTarget is fired do NOT affect those called targets. -->
+ <!-- The rest of these are here so that other DependsOn targets have access to these properties. -->
+ <PropertyGroup>
+ <DropDirectoryNoSlash>$(DropsRoot)$(ProductName)-$(BuildVersion)</DropDirectoryNoSlash>
+ <DropDirectory>$(DropDirectoryNoSlash)\</DropDirectory>
+ </PropertyGroup>
+ </Target>
+
+ <Target Name="BuildUnifiedProduct">
+ <MSBuild BuildInParallel="$(BuildInParallel)"
+ Projects="$(ProjectRoot)src\$(ProductName)\$(ProductName).csproj"
+ Targets="BuildUnifiedProduct" />
+ </Target>
+</Project>
diff --git a/tools/DotNetOpenAuth.props b/tools/DotNetOpenAuth.props
index a3ad973..844fe92 100644
--- a/tools/DotNetOpenAuth.props
+++ b/tools/DotNetOpenAuth.props
@@ -4,13 +4,14 @@
<ProductName>DotNetOpenAuth</ProductName>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<TargetFrameworkVersion Condition=" '$(TargetFrameworkVersion)' == '' ">v3.5</TargetFrameworkVersion>
- <ProjectRoot Condition="'$(ProjectRoot)' == ''">$(MSBuildProjectDirectory)\</ProjectRoot>
+ <ProjectRoot Condition="'$(ProjectRoot)' == ''">$(MSBuildThisFileDirectory)..\</ProjectRoot>
<DropsRoot>$(ProjectRoot)drops\$(Configuration)\</DropsRoot>
<OutputPath>$(ProjectRoot)bin\$(TargetFrameworkVersion)\$(Configuration)\</OutputPath>
<DocOutputPath>$(ProjectRoot)doc\</DocOutputPath>
<IntermediatePath>$(ProjectRoot)obj\$(TargetFrameworkVersion)\$(Configuration)\</IntermediatePath>
<BaseIntermediateOutputPath Condition=" '$(BaseIntermediateOutputPath)' == '' ">obj\$(TargetFrameworkVersion)\</BaseIntermediateOutputPath>
<ToolsDir>$(ProjectRoot)tools\</ToolsDir>
+ <ZipLevel>6</ZipLevel>
<ClrVersion Condition=" '$(TargetFrameworkVersion)' == 'v4.0' ">4</ClrVersion>
<ClrVersion Condition=" '$(TargetFrameworkVersion)' != 'v4.0' ">2</ClrVersion>
@@ -20,8 +21,16 @@
<KeyPairContainer Condition="'$(KeyPairContainer)' == ''">DotNetOpenAuth</KeyPairContainer>
<PublicKeyToken>2780CCD10D57B246</PublicKeyToken>
<DelaySign>true</DelaySign>
+
+ <ILMergeOutputAssemblyDirectory>$(OutputPath)unified\</ILMergeOutputAssemblyDirectory>
+ <ILMergeOutputAssembly>$(ILMergeOutputAssemblyDirectory)$(ProductName).dll</ILMergeOutputAssembly>
</PropertyGroup>
+ <ItemGroup>
+ <ILMergeInputAssemblies Include="$(OutputPath)$(ProductName).dll;
+ $(ProjectRoot)lib\Microsoft.Contracts.dll; "/>
+ </ItemGroup>
+
<Import Project="$(ProjectRoot)lib\DotNetOpenAuth.BuildTasks.targets" />
<Target Name="InitializeProps">
diff --git a/tools/DotNetOpenAuth.targets b/tools/DotNetOpenAuth.targets
index 9a2c6f9..6aa5057 100644
--- a/tools/DotNetOpenAuth.targets
+++ b/tools/DotNetOpenAuth.targets
@@ -2,12 +2,21 @@
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0">
<Import Project="DotNetOpenAuth.Versioning.targets" />
<Import Project="JavascriptPacker.targets" />
+ <UsingTask AssemblyFile="$(ProjectRoot)lib\MSBuild.Community.Tasks.dll" TaskName="ILMerge"/>
<PropertyGroup>
<DefineConstants Condition=" '$(SignAssembly)' == 'true' ">$(DefineConstants);StrongNameSigned</DefineConstants>
<DefineConstants Condition=" '$(ClrVersion)' == '4' ">$(DefineConstants);CLR4</DefineConstants>
</PropertyGroup>
+ <ItemGroup>
+ <DelaySignedAssemblies Include="$(ILMergeOutputAssembly);
+ $(OutputPath)$(ProductName).dll;
+ $(OutputPath)$(ProductName).Contracts.dll;
+ $(OutputPath)$(ProductName).Test.dll;
+ $(ProjectRoot)samples\OpenIdOfflineProvider\bin\$(Configuration)\OpenIdOfflineProvider.exe" />
+ </ItemGroup>
+
<ItemGroup Condition=" '$(ClrVersion)' != '4' ">
<Reference Include="Microsoft.Contracts, Version=1.0.0.0, Culture=neutral, PublicKeyToken=736440c9b414ea16, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
@@ -48,4 +57,12 @@
<Output TaskParameter="AccessorAssembly" ItemName="ReferencePath" />
</Publicize>
</Target>
+
+ <Target Name="ReSignDelaySignedAssemblies">
+ <Message Text="Signing delay-signed assemblies using key pair container $(KeyPairContainer)." />
+ <ReSignDelaySignedAssemblies
+ KeyContainer="$(KeyPairContainer)"
+ Assemblies="@(DelaySignedAssemblies)"
+ Condition="Exists(%(Identity))" />
+ </Target>
</Project>
diff --git a/vsi/vsi.proj b/vsi/vsi.proj
new file mode 100644
index 0000000..7ad2a9b
--- /dev/null
+++ b/vsi/vsi.proj
@@ -0,0 +1,104 @@
+<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <Import Project="$(MSBuildProjectDirectory)\..\tools\DotNetOpenAuth.automated.props"/>
+
+ <PropertyGroup>
+ <VS2008ProjectTemplatesDirectory>$(IntermediatePath)VS2008projecttemplates\</VS2008ProjectTemplatesDirectory>
+ <ProjectTemplatesVsiDirectory>$(IntermediatePath)vsi\</ProjectTemplatesVsiDirectory>
+
+ </PropertyGroup>
+
+ <ItemGroup>
+ <DirectoriesToClean Include="$(ProjectTemplatesLayoutPath)" />
+ <ProjectTemplates Include="$(ProjectRoot)projecttemplates\**\*.*proj" />
+ </ItemGroup>
+
+ <Target Name="ProjectTemplates2008" DependsOnTargets="ProjectTemplatesLayout">
+ <ItemGroup>
+ <ProjectTemplates2008Source Include="$(ProjectTemplatesLayoutPath)**" />
+ <ProjectTemplates2008Layout Include="@(ProjectTemplates2008Source->'$(VS2008ProjectTemplatesDirectory)%(RecursiveDir)%(FileName)%(Extension)')" />
+ <ProjectTemplates2008Layout>
+ <HardLink Condition=" '%(Extension)' != '.csproj' ">true</HardLink>
+ </ProjectTemplates2008Layout>
+
+ <VS2008ProjectTemplates Include="@(ProjectTemplates2008Layout)" Condition="'%(Extension)' == '.vstemplate'" />
+ <TopLevelVS2008ProjectTemplates Include="@(VS2008ProjectTemplates)" Condition="'%(RootDir)%(Directory)' == '$(VS2008ProjectTemplatesDirectory)'" />
+ <VS2008ProjectTemplateZipFiles Include="@(TopLevelVS2008ProjectTemplates->'%(RootDir)%(Directory)%(FileName).zip')" />
+ </ItemGroup>
+
+ <HardLinkCopy SourceFiles="@(ProjectTemplates2008Source)" DestinationFiles="@(ProjectTemplates2008Layout)" />
+
+ <DowngradeProjects
+ Projects="@(ProjectTemplates2008Layout)"
+ Condition="'%(Extension)' == '.csproj'"
+ DowngradeMvc2ToMvc1="true"
+ />
+
+ <Purge Directories="$(VS2008ProjectTemplatesDirectory)" IntendedFiles="@(ProjectTemplates2008Layout)" />
+
+ <DiscoverProjectTemplates TopLevelTemplates="@(TopLevelVS2008ProjectTemplates)">
+ <Output TaskParameter="ProjectTemplates" ItemName="SubVS2008Templates" />
+ <Output TaskParameter="ProjectTemplateContents" ItemName="VS2008TemplateItemContents" />
+ </DiscoverProjectTemplates>
+
+ <ItemGroup>
+ <!-- Include in each template .zip file the top-level .vstemplate file itself. -->
+ <VS2008ProjectTemplateContents Include="@(TopLevelVS2008ProjectTemplates)">
+ <ZipFile>$(ProjectTemplatesVsiDirectory)%(FileName).zip</ZipFile>
+ <WorkingDirectory>$(VS2008ProjectTemplatesDirectory)</WorkingDirectory>
+ </VS2008ProjectTemplateContents>
+
+ <!-- Now throw in all the files in each of the project-level template's directories and their children. -->
+ <VS2008ProjectTemplateContents Include="@(VS2008TemplateItemContents)">
+ <ZipFile>$(ProjectTemplatesVsiDirectory)%(VS2008TemplateItemContents.TopLevelTemplateFileName).zip</ZipFile>
+ <WorkingDirectory>$(VS2008ProjectTemplatesDirectory)</WorkingDirectory>
+ </VS2008ProjectTemplateContents>
+
+ <!-- Include the template icon for each .zip file. -->
+ <VS2008ProjectTemplateContents Include="@(TopLevelVS2008ProjectTemplates->'$(VS2008ProjectTemplatesDirectory)__TemplateIcon.ico')">
+ <ZipFile>$(ProjectTemplatesVsiDirectory)%(TopLevelVS2008ProjectTemplates.FileName).zip</ZipFile>
+ <WorkingDirectory>$(VS2008ProjectTemplatesDirectory)</WorkingDirectory>
+ </VS2008ProjectTemplateContents>
+ </ItemGroup>
+
+ <Zip
+ Files="@(VS2008ProjectTemplateContents)"
+ ZipFileName="%(VS2008ProjectTemplateContents.ZipFile)"
+ WorkingDirectory="%(VS2008ProjectTemplateContents.WorkingDirectory)"
+ ZipLevel="$(ZipLevel)"
+ />
+ </Target>
+
+ <Target Name="vsi" DependsOnTargets="ProjectTemplates2008">
+ <PropertyGroup>
+ <ProjectTemplatesVsi>$(DropDirectoryNoSlash).vsi</ProjectTemplatesVsi>
+ </PropertyGroup>
+ <ItemGroup>
+ <VsiTransformSource Include="$(ProjectRoot)vsi\*.vscontent">
+ <BeforeTokens>$version$</BeforeTokens>
+ <AfterTokens>$(BuildVersion)</AfterTokens>
+ <SkipUnchangedFiles>false</SkipUnchangedFiles>
+ </VsiTransformSource>
+ <VsiTransformLayout Include="@(VsiTransformSource->'$(ProjectTemplatesVsiDirectory)%(RecursiveDir)%(FileName)%(Extension)')" />
+
+ <ProjectTemplateVsiContents Include="
+ $(ProjectTemplatesVsiDirectory)*.zip;
+ @(VsiTransformLayout);
+ " />
+ </ItemGroup>
+
+ <CopyWithTokenSubstitution SourceFiles="@(VsiTransformSource)" DestinationFiles="@(VsiTransformLayout)" />
+
+ <Zip
+ Files="@(ProjectTemplateVsiContents)"
+ ZipFileName="$(ProjectTemplatesVsi)"
+ WorkingDirectory="$(ProjectTemplatesVsiDirectory)"
+ ZipLevel="$(ZipLevel)"
+ />
+ </Target>
+
+ <Target Name="Build" DependsOnTargets="vsi">
+
+ </Target>
+
+ <Import Project="$(ProjectRoot)tools\DotNetOpenAuth.automated.targets"/>
+</Project> \ No newline at end of file
diff --git a/vsix/vsix.proj b/vsix/vsix.proj
new file mode 100644
index 0000000..b9e39d3
--- /dev/null
+++ b/vsix/vsix.proj
@@ -0,0 +1,170 @@
+<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <Import Project="$(MSBuildProjectDirectory)\..\tools\DotNetOpenAuth.automated.props"/>
+
+ <PropertyGroup>
+ <VS2010ProjectTemplatesDirectory>$(IntermediatePath)VS2010projecttemplates\</VS2010ProjectTemplatesDirectory>
+ <ProjectTemplateSubdirectory>$(ExtensionVsixLayoutDirectory)PT\CSharp\Web\</ProjectTemplateSubdirectory>
+ </PropertyGroup>
+
+ <Target Name="VsixManifestLayout">
+ <ItemGroup>
+ <ProjectTemplates2010TransformSource Include="
+ $(ProjectRoot)vsix\extension.vsixmanifest;
+ $(ProjectRoot)LICENSE.txt;
+ ">
+ <BeforeTokens>$version$</BeforeTokens>
+ <AfterTokens>$(BuildVersion)</AfterTokens>
+ <SkipUnchangedFiles>false</SkipUnchangedFiles>
+ </ProjectTemplates2010TransformSource>
+ <ProjectTemplates2010TransformLayout Include="@(ProjectTemplates2010TransformSource->'$(ExtensionVsixLayoutDirectory)%(RecursiveDir)%(FileName)%(Extension)')" />
+ </ItemGroup>
+ <CopyWithTokenSubstitution SourceFiles="@(ProjectTemplates2010TransformSource)" DestinationFiles="@(ProjectTemplates2010TransformLayout)" />
+ </Target>
+
+ <Target Name="ProjectTemplates2010" DependsOnTargets="ProjectTemplatesLayout">
+ <ItemGroup>
+ <ProjectTemplates2010Source Include="$(ProjectTemplatesLayoutPath)**" />
+ <ProjectTemplates2010Layout Include="@(ProjectTemplates2010Source->'$(VS2010ProjectTemplatesDirectory)%(RecursiveDir)%(FileName)%(Extension)')" />
+ <ProjectTemplates2010Layout>
+ <HardLink Condition=" '%(Extension)' != '.csproj' ">true</HardLink>
+ </ProjectTemplates2010Layout>
+
+ <VS2010ProjectTemplates Include="@(ProjectTemplates2010Layout)" Condition="'%(Extension)' == '.vstemplate'" />
+ <TopLevelVS2010ProjectTemplates Include="@(VS2010ProjectTemplates)" Condition="'%(RootDir)%(Directory)' == '$(VS2010ProjectTemplatesDirectory)'" />
+ <VS2010ProjectTemplateZipFiles Include="@(TopLevelVS2010ProjectTemplates->'%(RootDir)%(Directory)%(FileName).zip')" />
+ </ItemGroup>
+
+ <HardLinkCopy SourceFiles="@(ProjectTemplates2010Source)" DestinationFiles="@(ProjectTemplates2010Layout)" />
+
+ <Purge Directories="$(VS2010ProjectTemplatesDirectory)" IntendedFiles="@(ProjectTemplates2010Layout)" />
+
+ <DiscoverProjectTemplates TopLevelTemplates="@(TopLevelVS2010ProjectTemplates)">
+ <Output TaskParameter="ProjectTemplates" ItemName="SubVS2010Templates" />
+ <Output TaskParameter="ProjectTemplateContents" ItemName="VS2010TemplateItemContents" />
+ </DiscoverProjectTemplates>
+
+ <ItemGroup>
+ <!-- Include in each template .zip file the top-level .vstemplate file itself. -->
+ <VS2010ProjectTemplateContents Include="@(TopLevelVS2010ProjectTemplates)">
+ <ZipFile>$(ProjectTemplateSubdirectory)%(FileName).zip</ZipFile>
+ <WorkingDirectory>$(VS2010ProjectTemplatesDirectory)</WorkingDirectory>
+ </VS2010ProjectTemplateContents>
+
+ <!-- Now throw in all the files in each of the project-level template's directories and their children. -->
+ <VS2010ProjectTemplateContents Include="@(VS2010TemplateItemContents)">
+ <ZipFile>$(ProjectTemplateSubdirectory)%(VS2010TemplateItemContents.TopLevelTemplateFileName).zip</ZipFile>
+ <WorkingDirectory>$(VS2010ProjectTemplatesDirectory)</WorkingDirectory>
+ </VS2010ProjectTemplateContents>
+
+ <!-- Include the template icon for each .zip file. -->
+ <VS2010ProjectTemplateContents Include="@(TopLevelVS2010ProjectTemplates->'$(VS2010ProjectTemplatesDirectory)__TemplateIcon.ico')">
+ <ZipFile>$(ProjectTemplateSubdirectory)%(TopLevelVS2010ProjectTemplates.FileName).zip</ZipFile>
+ <WorkingDirectory>$(VS2010ProjectTemplatesDirectory)</WorkingDirectory>
+ </VS2010ProjectTemplateContents>
+
+ <ExtensionVsixContents Include="%(VS2010ProjectTemplateContents.ZipFile)" />
+ </ItemGroup>
+
+ <Zip
+ Files="@(VS2010ProjectTemplateContents)"
+ ZipFileName="%(VS2010ProjectTemplateContents.ZipFile)"
+ WorkingDirectory="%(VS2010ProjectTemplateContents.WorkingDirectory)"
+ ZipLevel="$(ZipLevel)"
+ />
+ </Target>
+
+ <Target Name="VsixLayout" DependsOnTargets="ProjectTemplates2010;VsixManifestLayout">
+ <ItemGroup>
+ <ExtensionVsixSources Include="
+ $(ProjectRoot)vsix\*;
+ " Exclude="
+ $(ProjectRoot)vsix\extension.vsixmanifest;
+ ">
+ <SkipUnchangedFiles>true</SkipUnchangedFiles>
+ </ExtensionVsixSources>
+
+ <ExtensionVsixTargets Include="@(ExtensionVsixSources->'$(ExtensionVsixLayoutDirectory)%(FileName)%(Extension)')" />
+
+ <ExtensionVsixContents Include="
+ @(ExtensionVsixTargets);
+ @(ProjectTemplates2010TransformLayout);
+ "/>
+ </ItemGroup>
+
+ <Copy SourceFiles="@(ExtensionVsixSources)" DestinationFiles="@(ExtensionVsixTargets)" SkipUnchangedFiles="true" />
+ <Purge Directories="$(ExtensionVsixLayoutDirectory)" IntendedFiles="@(ExtensionVsixContents)" />
+
+ <!-- Build individual VSIX files for each project template for the Visual Studio Gallery,
+ which only allows one project template per VSIX. -->
+ <ItemGroup>
+ <VSGalleryProjectTemplates Include="$(ProjectTemplateSubdirectory)*.zip" />
+ <VSGalleryVsixRawSources Include="$(ExtensionVsixLayoutDirectory)**"
+ Exclude="$(ProjectTemplateSubdirectory)*.zip;$(ExtensionVsixLayoutDirectory)*.vsixmanifest">
+ <VSGalleryVsix>$(DropsRoot)$(ProductName) %(VSGalleryProjectTemplates.FileName)-$(BuildVersion).vsix</VSGalleryVsix>
+ <TopLevelTemplate>%(VSGalleryProjectTemplates.FileName)</TopLevelTemplate>
+ </VSGalleryVsixRawSources>
+ <VSGalleryVsixSources Include="@(VSGalleryVsixRawSources)">
+ <TargetPath>$(IntermediatePath)%(TopLevelTemplate).vsix\%(FileName)%(Extension)</TargetPath>
+ </VSGalleryVsixSources>
+
+ <VSGalleryVsixZipSources Include="$(ExtensionVsixLayoutDirectory)**\*.zip"/>
+ <VSGalleryVsixSources Include="@(VSGalleryVsixZipSources)">
+ <TopLevelTemplate>%(FileName)</TopLevelTemplate>
+ <VSGalleryVsix>$(DropsRoot)$(ProductName) %(FileName)-$(BuildVersion).vsix</VSGalleryVsix>
+ <TargetPath>$(IntermediatePath)%(FileName).vsix\%(RecursiveDir)%(FileName)%(Extension)</TargetPath>
+ </VSGalleryVsixSources>
+
+ <VSGalleryVsixSources Include="@(VSGalleryProjectTemplates->'$(ProjectRoot)projecttemplates\%(FileName).vsixmanifest')">
+ <VSGalleryVsix>$(DropsRoot)$(ProductName) %(VSGalleryProjectTemplates.FileName)-$(BuildVersion).vsix</VSGalleryVsix>
+ <TopLevelTemplate>%(VSGalleryProjectTemplates.FileName)</TopLevelTemplate>
+ <TargetPath>$(IntermediatePath)%(VSGalleryProjectTemplates.FileName).vsix\extension.vsixmanifest</TargetPath>
+ <Transform>true</Transform>
+ <BeforeTokens>$version$</BeforeTokens>
+ <AfterTokens>$(BuildVersion)</AfterTokens>
+ <SkipUnchangedFiles>false</SkipUnchangedFiles>
+ </VSGalleryVsixSources>
+
+ <VSGalleryVsixTargets Include="@(VSGalleryVsixSources->'%(TargetPath)')">
+ <WorkingDirectory>$(IntermediatePath)%(TopLevelTemplate).vsix</WorkingDirectory>
+ </VSGalleryVsixTargets>
+ <VSGalleryVsixPathsToPurge Include="@(VSGalleryProjectTemplates->'$(IntermediatePath)%(FileName).vsix')"/>
+ </ItemGroup>
+ <HardLinkCopy
+ SourceFiles="@(VSGalleryVsixSources)"
+ DestinationFiles="%(VSGalleryVsixSources.TargetPath)"
+ Condition=" '%(VSGalleryVsixSources.Transform)' != 'true' "/>
+ <CopyWithTokenSubstitution
+ SourceFiles="@(VSGalleryVsixSources)"
+ DestinationFiles="%(VSGalleryVsixSources.TargetPath)"
+ Condition=" '%(VSGalleryVsixSources.Transform)' == 'true' "/>
+ <Purge
+ Directories="@(VSGalleryVsixPathsToPurge)"
+ IntendedFiles="@(VSGalleryVsixTargets)" />
+ </Target>
+
+ <Target Name="vsix" DependsOnTargets="VsixLayout">
+ <PropertyGroup>
+ <ExtensionVsix>$(DropsRoot)$(ProductName) SDK-$(BuildVersion).vsix</ExtensionVsix>
+ </PropertyGroup>
+ <Zip
+ Files="@(ExtensionVsixContents)"
+ ZipFileName="$(ExtensionVsix)"
+ WorkingDirectory="$(ExtensionVsixLayoutDirectory)"
+ ZipLevel="$(ZipLevel)"
+ />
+
+ <Zip
+ Files="@(VSGalleryVsixTargets)"
+ ZipFileName="%(VSGalleryVsixTargets.VSGalleryVsix)"
+ WorkingDirectory="%(VSGalleryVsixTargets.WorkingDirectory)"
+ ZipLevel="$(ZipLevel)"
+ />
+ </Target>
+
+ <Target Name="Build" DependsOnTargets="vsix">
+
+ </Target>
+
+ <Import Project="$(ProjectRoot)projecttemplates\projecttemplates.targets"/>
+ <Import Project="$(ProjectRoot)DotNetOpenAuth.automated.targets"/>
+</Project> \ No newline at end of file