diff options
author | Andrew Arnott <andrewarnott@gmail.com> | 2010-02-11 07:46:56 -0800 |
---|---|---|
committer | Andrew Arnott <andrewarnott@gmail.com> | 2010-02-11 07:46:56 -0800 |
commit | cc2976b4fcebf1f87f6211cb0e8558677b9e8fde (patch) | |
tree | b65b48fd55b2a6601ff1e07837d0ccf67bccc85d | |
parent | 9aac5e6ed63693f5aad2ddf2e1e326d65018dc3f (diff) | |
download | DotNetOpenAuth-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.proj | 440 | ||||
-rw-r--r-- | projecttemplates/MvcRelyingParty.vsixmanifest | 2 | ||||
-rw-r--r-- | projecttemplates/RelyingPartyLogic/RelyingPartyLogic.csproj | 6 | ||||
-rw-r--r-- | projecttemplates/WebFormsRelyingParty.vsixmanifest | 2 | ||||
-rw-r--r-- | projecttemplates/projecttemplates.proj | 143 | ||||
-rw-r--r-- | src/DotNetOpenAuth.BuildTasks/DotNetOpenAuth.BuildTasks.sln | 5 | ||||
-rw-r--r-- | src/DotNetOpenAuth.BuildTasks/MergeProjectWithVSTemplate.cs | 25 | ||||
-rw-r--r-- | src/DotNetOpenAuth/DotNetOpenAuth.csproj | 14 | ||||
-rw-r--r-- | tools/DotNetOpenAuth.automated.props | 13 | ||||
-rw-r--r-- | tools/DotNetOpenAuth.automated.targets | 29 | ||||
-rw-r--r-- | tools/DotNetOpenAuth.props | 11 | ||||
-rw-r--r-- | tools/DotNetOpenAuth.targets | 17 | ||||
-rw-r--r-- | vsi/vsi.proj | 104 | ||||
-rw-r--r-- | vsix/vsix.proj | 170 |
14 files changed, 546 insertions, 435 deletions
@@ -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 |