diff options
-rw-r--r-- | build.proj | 215 | ||||
-rw-r--r-- | lib/DotNetOpenAuth.BuildTasks.dll | bin | 64000 -> 65536 bytes | |||
-rw-r--r-- | lib/DotNetOpenAuth.BuildTasks.pdb | bin | 159232 -> 165376 bytes | |||
-rw-r--r-- | lib/DotNetOpenAuth.BuildTasks.targets | 1 | ||||
-rw-r--r-- | projecttemplates/MvcRelyingParty.vstemplate | 2 | ||||
-rw-r--r-- | src/DotNetOpenAuth.BuildTasks/DiscoverProjectTemplates.cs | 1 | ||||
-rw-r--r-- | src/DotNetOpenAuth.BuildTasks/DotNetOpenAuth.BuildTasks.csproj | 2 | ||||
-rw-r--r-- | src/DotNetOpenAuth.BuildTasks/HardLinkCopy.cs | 61 | ||||
-rw-r--r-- | src/DotNetOpenAuth.BuildTasks/NativeMethods.cs | 18 | ||||
-rw-r--r-- | vsi/DotNetOpenAuth Starter Kits.vscontent (renamed from projecttemplates/DotNetOpenAuth Starter Kits.vscontent) | 6 | ||||
-rw-r--r-- | vsix/VSIXProject_large.png | bin | 0 -> 25212 bytes | |||
-rw-r--r-- | vsix/VSIXProject_small.png | bin | 0 -> 309326 bytes | |||
-rw-r--r-- | vsix/extension.vsixmanifest | 4 |
13 files changed, 237 insertions, 73 deletions
@@ -6,9 +6,13 @@ <ILMergeOutputAssemblyDirectory>$(OutputPath)unified\</ILMergeOutputAssemblyDirectory> <ILMergeOutputAssembly>$(ILMergeOutputAssemblyDirectory)$(ProductName).dll</ILMergeOutputAssembly> <ProjectTemplatesLayoutPath>$(IntermediatePath)projecttemplates\</ProjectTemplatesLayoutPath> - <ProjectTemplatesVsi>$(ProjectTemplatesLayoutPath)DotNetOpenAuth Starter Kits.vsi</ProjectTemplatesVsi> - <ExtensionVsixLayoutPath>$(IntermediatePath)Vsix\</ExtensionVsixLayoutPath> - <ExtensionVsix>$(ExtensionVsixLayoutPath)DotNetOpenAuth Starter Kits.vsix</ExtensionVsix> + + <VS2008ProjectTemplatesDirectory>$(IntermediatePath)VS2008projecttemplates\</VS2008ProjectTemplatesDirectory> + <ProjectTemplatesVsiDirectory>$(IntermediatePath)vsi\</ProjectTemplatesVsiDirectory> + + <VS2010ProjectTemplatesDirectory>$(IntermediatePath)VS2010projecttemplates\</VS2010ProjectTemplatesDirectory> + <ExtensionVsixLayoutDirectory>$(IntermediatePath)Vsix\</ExtensionVsixLayoutDirectory> + <ZipLevel>6</ZipLevel> </PropertyGroup> <Import Project="$(ProjectRoot)tools\$(ProductName).Versioning.targets"/> @@ -139,7 +143,8 @@ <Zip ZipFileName="$(ToolsZip)" Files="@(AllToolTargets)" - WorkingDirectory="$(ToolsDirectory)" /> + WorkingDirectory="$(ToolsDirectory)" + ZipLevel="$(ZipLevel)" /> </Target> <Target Name="BuildProjectTemplates"> @@ -183,21 +188,11 @@ <SkipUnchangedFiles Condition="'%(Extension)' != '.csproj'">true</SkipUnchangedFiles> <SkipUnchangedFiles Condition="'%(Extension)' == '.csproj'">false</SkipUnchangedFiles> </_ProjectTemplatesTransformSource> - <_ProjectTemplatesTransformSource Include="@(ProjectTemplatesSource)" Condition=" - '%(Extension)' == '.vscontent' - "> - <BeforeTokens>$version$</BeforeTokens> - <AfterTokens>$(BuildVersion)</AfterTokens> - <SkipUnchangedFiles>false</SkipUnchangedFiles> - </_ProjectTemplatesTransformSource> <ProjectTemplatesSource Remove="@(_ProjectTemplatesTransformSource)" /> <ProjectTemplatesLayout Include="@(ProjectTemplatesSource->'$(ProjectTemplatesLayoutPath)%(RecursiveDir)%(FileName)%(Extension)')"/> <ProjectTemplatesTransformLayout Include="@(_ProjectTemplatesTransformSource->'$(ProjectTemplatesLayoutPath)%(RecursiveDir)%(FileName)%(Extension)')"/> - <VSProjectTemplates Include="@(ProjectTemplatesLayout)" Condition="'%(Extension)' == '.vstemplate'" /> - <TopLevelVSProjectTemplates Include="@(VSProjectTemplates)" Condition="'%(RootDir)%(Directory)' == '$(ProjectTemplatesLayoutPath)'" /> - <!-- Include the template icon --> <ProjectTemplatesSource Include="$(ProjectRoot)doc\logo\favicon.ico" /> <ProjectTemplatesLayout Include="$(ProjectTemplatesLayoutPath)__TemplateIcon.ico" /> @@ -218,13 +213,13 @@ <FixupReferenceAssemblies Include="@(ProjectTemplateLibrariesTargets)" Condition="'%(Extension)' == '.dll'" /> <InjectedLibraryItems Include="@(ProjectTemplateLibrariesTargets->'lib\%(FileName)%(Extension)')" /> - <VSProjectTemplateZipFiles Include="@(TopLevelVSProjectTemplates->'%(RootDir)%(Directory)%(FileName).zip')" /> + <VSProjectTemplates Include="@(ProjectTemplatesLayout)" Condition="'%(Extension)' == '.vstemplate'" /> </ItemGroup> <Trim Inputs="@(_ProjectTemplatesTransformSource)" MetadataName="BeforeTokens" AllAfter="\"> <Output TaskParameter="Outputs" ItemName="ProjectTemplatesTransformSource" /> </Trim> - <MSBuild Projects="@(ProjectTemplates)" /> + <!--<MSBuild Projects="@(ProjectTemplates)" />--> <Copy SourceFiles="@(ProjectTemplatesSource)" DestinationFiles="@(ProjectTemplatesLayout)" SkipUnchangedFiles="true" /> <CopyWithTokenSubstitution SourceFiles="@(ProjectTemplatesTransformSource)" DestinationFiles="@(ProjectTemplatesTransformLayout)"> <Output TaskParameter="CopiedFiles" ItemName="CopiedProjectTemplateFiles" /> @@ -233,8 +228,6 @@ IntendedFiles=" @(ProjectTemplatesLayout); @(ProjectTemplatesTransformLayout); - @(VSProjectTemplateZipFiles); - $(ProjectTemplatesVsi); " /> <ChangeProjectReferenceToAssemblyReference Projects="@(CopiedProjectTemplateFiles)" @@ -251,10 +244,6 @@ Condition="'%(CopiedProjectTemplateFiles.FileName)%(CopiedProjectTemplateFiles.Extension)' == 'RelyingPartyLogic.csproj'" Items="@(InjectedLibraryItems)" /> - <DowngradeProjects - Projects="@(CopiedProjectTemplateFiles)" - Condition="'%(Extension)' == '.csproj'" - /> <MergeProjectWithVSTemplate ProjectItemTypes="@(VsTemplateProjectItemTypes)" ReplaceParametersExtensions="@(VsTemplateParameterReplaceExtensions)" @@ -262,88 +251,180 @@ /> </Target> - <Target Name="ProjectTemplates" DependsOnTargets="ProjectTemplatesLayout"> - <DiscoverProjectTemplates TopLevelTemplates="@(TopLevelVSProjectTemplates)"> - <Output TaskParameter="ProjectTemplates" ItemName="SubVSTemplates" /> - <Output TaskParameter="ProjectTemplateContents" ItemName="TemplateItemContents" /> + <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'" + /> + + <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. --> - <VSProjectTemplateContents Include="@(TopLevelVSProjectTemplates)"> - <ZipFile>$(ProjectTemplatesLayoutPath)%(FileName).zip</ZipFile> - <WorkingDirectory>$(ProjectTemplatesLayoutPath)</WorkingDirectory> - </VSProjectTemplateContents> + <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. --> - <VSProjectTemplateContents Include="@(TemplateItemContents)"> - <ZipFile>$(ProjectTemplatesLayoutPath)%(TemplateItemContents.TopLevelTemplateFileName).zip</ZipFile> - <WorkingDirectory>$(ProjectTemplatesLayoutPath)</WorkingDirectory> - </VSProjectTemplateContents> + <VS2008ProjectTemplateContents Include="@(VS2008TemplateItemContents)"> + <ZipFile>$(ProjectTemplatesVsiDirectory)%(VS2008TemplateItemContents.TopLevelTemplateFileName).zip</ZipFile> + <WorkingDirectory>$(VS2008ProjectTemplatesDirectory)</WorkingDirectory> + </VS2008ProjectTemplateContents> <!-- Include the template icon for each .zip file. --> - <VSProjectTemplateContents Include="@(TopLevelVSProjectTemplates->'$(ProjectTemplatesLayoutPath)__TemplateIcon.ico')"> - <ZipFile>$(ProjectTemplatesLayoutPath)%(TopLevelVSProjectTemplates.FileName).zip</ZipFile> - <WorkingDirectory>$(ProjectTemplatesLayoutPath)</WorkingDirectory> - </VSProjectTemplateContents> + <VS2008ProjectTemplateContents Include="@(TopLevelVS2008ProjectTemplates->'$(VS2008ProjectTemplatesDirectory)__TemplateIcon.ico')"> + <ZipFile>$(ProjectTemplatesVsiDirectory)%(TopLevelVS2008ProjectTemplates.FileName).zip</ZipFile> + <WorkingDirectory>$(VS2008ProjectTemplatesDirectory)</WorkingDirectory> + </VS2008ProjectTemplateContents> </ItemGroup> <Zip - Files="@(VSProjectTemplateContents)" - ZipFileName="%(VSProjectTemplateContents.ZipFile)" - WorkingDirectory="%(VSProjectTemplateContents.WorkingDirectory)" + Files="@(VS2008ProjectTemplateContents)" + ZipFileName="%(VS2008ProjectTemplateContents.ZipFile)" + WorkingDirectory="%(VS2008ProjectTemplateContents.WorkingDirectory)" + ZipLevel="$(ZipLevel)" /> + + <Purge Directories="$(VS2008ProjectTemplatesDirectory)" IntendedFiles="@(ProjectTemplates2008Layout)" /> </Target> - <Target Name="vsi" DependsOnTargets="ProjectTemplates"> + <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)" /> + + <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>$(ExtensionVsixLayoutDirectory)%(FileName)\%(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>$(ExtensionVsixLayoutDirectory)%(VS2010TemplateItemContents.TopLevelTemplateFileName)\%(VS2010TemplateItemContents.TopLevelTemplateFileName).zip</ZipFile> + <WorkingDirectory>$(VS2010ProjectTemplatesDirectory)</WorkingDirectory> + </VS2010ProjectTemplateContents> + + <!-- Include the template icon for each .zip file. --> + <VS2010ProjectTemplateContents Include="@(TopLevelVS2010ProjectTemplates->'$(VS2010ProjectTemplatesDirectory)__TemplateIcon.ico')"> + <ZipFile>$(ExtensionVsixLayoutDirectory)%(TopLevelVS2010ProjectTemplates.FileName)\%(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"> + <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=" - $(ProjectTemplatesLayoutPath)*.vscontent; - $(ProjectTemplatesLayoutPath)*.zip + $(ProjectTemplatesVsiDirectory)*.zip; + @(VsiTransformLayout); " /> </ItemGroup> + <CopyWithTokenSubstitution SourceFiles="@(VsiTransformSource)" DestinationFiles="@(VsiTransformLayout)" /> + <Zip Files="@(ProjectTemplateVsiContents)" ZipFileName="$(ProjectTemplatesVsi)" - WorkingDirectory="$(ProjectTemplatesLayoutPath)" + WorkingDirectory="$(ProjectTemplatesVsiDirectory)" + ZipLevel="$(ZipLevel)" /> </Target> - <Target Name="VsixLayout" DependsOnTargets="GetBuildVersion"> + <Target Name="VsixLayout" DependsOnTargets="ProjectTemplates2010"> <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)')" /> + <ExtensionVsixSources Include=" - $(ProjectRoot)vsix\[Content_Types].xml; - $(ProjectRoot)LICENSE.txt; - $(ProjectRoot)doc\logo\dnoa-logo.png; - $(ProjectRoot)doc\logo\dnoa-logo_64x64.png; - "> - <SkipUnchangedFiles>true</SkipUnchangedFiles> - </ExtensionVsixSources> - <ExtensionVsixSources Include=" + $(ProjectRoot)vsix\*; + " Exclude=" $(ProjectRoot)vsix\extension.vsixmanifest; "> <SkipUnchangedFiles>true</SkipUnchangedFiles> - <BeforeTokens>$version$</BeforeTokens> - <AfterTokens>$(BuildVersion)</AfterTokens> </ExtensionVsixSources> - <ExtensionVsixContents Include="@(ExtensionVsixSources->'$(ExtensionVsixLayoutPath)%(FileName)%(Extension)')" /> + + <ExtensionVsixTargets Include="@(ExtensionVsixSources->'$(ExtensionVsixLayoutDirectory)%(FileName)%(Extension)')" /> + + <ExtensionVsixContents Include=" + @(ExtensionVsixTargets); + @(ProjectTemplates2010TransformLayout); + "/> </ItemGroup> - <CopyWithTokenSubstitution SourceFiles="@(ExtensionVsixSources)" - DestinationFiles="@(ExtensionVsixContents)" /> - <Purge Directories="$(ExtensionVsixLayoutPath)" - IntendedFiles=" - @(ExtensionVsixContents); - $(ExtensionVsix); - " /> + <Copy SourceFiles="@(ExtensionVsixSources)" DestinationFiles="@(ExtensionVsixTargets)" SkipUnchangedFiles="true" /> + <CopyWithTokenSubstitution SourceFiles="@(ProjectTemplates2010TransformSource)" DestinationFiles="@(ProjectTemplates2010TransformLayout)" /> </Target> - <Target Name="vsix" DependsOnTargets="VsixLayout"> + <Target Name="vsix" DependsOnTargets="VsixLayout;_SetDropProperties"> + <PropertyGroup> + <ExtensionVsix>$(DropDirectoryNoSlash).vsix</ExtensionVsix> + </PropertyGroup> <Zip Files="@(ExtensionVsixContents)" ZipFileName="$(ExtensionVsix)" - WorkingDirectory="$(ExtensionVsixLayoutPath)" + WorkingDirectory="$(ExtensionVsixLayoutDirectory)" + ZipLevel="$(ZipLevel)" /> </Target> @@ -489,7 +570,7 @@ <PropertyGroup> <DropZip>$(DropDirectoryNoSlash).zip</DropZip> </PropertyGroup> - <Zip Files="@(AllDropTargets)" ZipFileName="$(DropZip)" WorkingDirectory="$(DropsRoot)" /> + <Zip Files="@(AllDropTargets)" ZipFileName="$(DropZip)" WorkingDirectory="$(DropsRoot)" ZipLevel="$(ZipLevel)" /> </Target> <!-- Although Nightly includes publishing samples and docs, those targets are conditioned for diff --git a/lib/DotNetOpenAuth.BuildTasks.dll b/lib/DotNetOpenAuth.BuildTasks.dll Binary files differindex 80a95bf..2897bea 100644 --- a/lib/DotNetOpenAuth.BuildTasks.dll +++ b/lib/DotNetOpenAuth.BuildTasks.dll diff --git a/lib/DotNetOpenAuth.BuildTasks.pdb b/lib/DotNetOpenAuth.BuildTasks.pdb Binary files differindex 9636457..8a7acea 100644 --- a/lib/DotNetOpenAuth.BuildTasks.pdb +++ b/lib/DotNetOpenAuth.BuildTasks.pdb diff --git a/lib/DotNetOpenAuth.BuildTasks.targets b/lib/DotNetOpenAuth.BuildTasks.targets index be91208..56cff0d 100644 --- a/lib/DotNetOpenAuth.BuildTasks.targets +++ b/lib/DotNetOpenAuth.BuildTasks.targets @@ -29,5 +29,6 @@ <UsingTask AssemblyFile="$(ProjectRoot)\lib\DotNetOpenAuth.BuildTasks.dll" TaskName="FixupShippingToolSamples" /> <UsingTask AssemblyFile="$(ProjectRoot)\lib\DotNetOpenAuth.BuildTasks.dll" TaskName="Publicize" /> <UsingTask AssemblyFile="$(ProjectRoot)\lib\DotNetOpenAuth.BuildTasks.dll" TaskName="DowngradeProjects" /> + <UsingTask AssemblyFile="$(ProjectRoot)\lib\DotNetOpenAuth.BuildTasks.dll" TaskName="HardLinkCopy" /> </Project> diff --git a/projecttemplates/MvcRelyingParty.vstemplate b/projecttemplates/MvcRelyingParty.vstemplate index d554cae..c9ebd35 100644 --- a/projecttemplates/MvcRelyingParty.vstemplate +++ b/projecttemplates/MvcRelyingParty.vstemplate @@ -2,7 +2,7 @@ <TemplateData> <Name>ASP.NET MVC OpenID-InfoCard RP</Name> <RequiredFrameworkVersion>3.5</RequiredFrameworkVersion> - <Description>An ASP.NET MVC web site that accepts OpenID and InfoCard logins</Description> + <Description>An ASP.NET MVC web site that accepts OpenID logins</Description> <ProjectType>CSharp</ProjectType> <ProjectSubType>Web</ProjectSubType> <NumberOfParentCategoriesToRollUp>2</NumberOfParentCategoriesToRollUp> diff --git a/src/DotNetOpenAuth.BuildTasks/DiscoverProjectTemplates.cs b/src/DotNetOpenAuth.BuildTasks/DiscoverProjectTemplates.cs index 0162c16..f49c9b1 100644 --- a/src/DotNetOpenAuth.BuildTasks/DiscoverProjectTemplates.cs +++ b/src/DotNetOpenAuth.BuildTasks/DiscoverProjectTemplates.cs @@ -15,6 +15,7 @@ namespace DotNetOpenAuth.BuildTasks { using Microsoft.Build.Utilities; public class DiscoverProjectTemplates : Task { + [Required] public ITaskItem[] TopLevelTemplates { get; set; } [Output] diff --git a/src/DotNetOpenAuth.BuildTasks/DotNetOpenAuth.BuildTasks.csproj b/src/DotNetOpenAuth.BuildTasks/DotNetOpenAuth.BuildTasks.csproj index 7dcc5d0..daf6327 100644 --- a/src/DotNetOpenAuth.BuildTasks/DotNetOpenAuth.BuildTasks.csproj +++ b/src/DotNetOpenAuth.BuildTasks/DotNetOpenAuth.BuildTasks.csproj @@ -109,10 +109,12 @@ <Compile Include="FilterItems.cs" /> <Compile Include="FixupReferenceHintPaths.cs" /> <Compile Include="FixupShippingToolSamples.cs" /> + <Compile Include="HardLinkCopy.cs" /> <Compile Include="MergeProjectWithVSTemplate.cs" /> <Compile Include="GetBuildVersion.cs" /> <Compile Include="CheckAdminRights.cs" /> <Compile Include="JsPack.cs" /> + <Compile Include="NativeMethods.cs" /> <Compile Include="ParseMaster.cs" /> <Compile Include="Publicize.cs" /> <Compile Include="Purge.cs" /> diff --git a/src/DotNetOpenAuth.BuildTasks/HardLinkCopy.cs b/src/DotNetOpenAuth.BuildTasks/HardLinkCopy.cs new file mode 100644 index 0000000..af2d1d0 --- /dev/null +++ b/src/DotNetOpenAuth.BuildTasks/HardLinkCopy.cs @@ -0,0 +1,61 @@ +//----------------------------------------------------------------------- +// <copyright file="HardLinkCopy.cs" company="Andrew Arnott"> +// Copyright (c) Andrew Arnott. All rights reserved. +// </copyright> +//----------------------------------------------------------------------- + +namespace DotNetOpenAuth.BuildTasks { + using System; + using System.Collections.Generic; + using System.Linq; + using System.Text; + using Microsoft.Build.Framework; + using Microsoft.Build.Utilities; + using System.IO; + + public class HardLinkCopy : Task { + [Required] + public ITaskItem[] SourceFiles { get; set; } + + [Required] + public ITaskItem[] DestinationFiles { get; set; } + + /// <summary> + /// Executes this instance. + /// </summary> + public override bool Execute() { + if (this.SourceFiles.Length != this.DestinationFiles.Length) { + this.Log.LogError("SourceFiles has {0} elements and DestinationFiles has {1} elements.", this.SourceFiles.Length, this.DestinationFiles.Length); + return false; + } + + for (int i = 0; i < this.SourceFiles.Length; i++) { + bool hardLink; + bool.TryParse(this.DestinationFiles[i].GetMetadata("HardLink"), out hardLink); + string sourceFile = this.SourceFiles[i].ItemSpec; + string destinationFile = this.DestinationFiles[i].ItemSpec; + this.Log.LogMessage( + MessageImportance.Low, + "Copying {0} -> {1}{2}.", + sourceFile, + destinationFile, + hardLink ? " as hard link" : string.Empty); + + if (!Directory.Exists(Path.GetDirectoryName(destinationFile))) { + Directory.CreateDirectory(Path.GetDirectoryName(destinationFile)); + } + + if (hardLink) { + if (File.Exists(destinationFile)) { + File.Delete(destinationFile); + } + NativeMethods.CreateHardLink(sourceFile, destinationFile); + } else { + File.Copy(sourceFile, destinationFile, true); + } + } + + return !this.Log.HasLoggedErrors; + } + } +} diff --git a/src/DotNetOpenAuth.BuildTasks/NativeMethods.cs b/src/DotNetOpenAuth.BuildTasks/NativeMethods.cs new file mode 100644 index 0000000..26de3a4 --- /dev/null +++ b/src/DotNetOpenAuth.BuildTasks/NativeMethods.cs @@ -0,0 +1,18 @@ +namespace DotNetOpenAuth.BuildTasks { + using System; + using System.Collections.Generic; + using System.Linq; + using System.Text; + using System.Runtime.InteropServices; + + internal static class NativeMethods { + [DllImport("kernel32", SetLastError = true)] + private static extern bool CreateHardLink(string newFileName, string existingFileName, IntPtr securityAttributes); + + internal static void CreateHardLink(string existingFileName, string newFileName) { + if (!CreateHardLink(newFileName, existingFileName, IntPtr.Zero)) { + Marshal.ThrowExceptionForHR(Marshal.GetHRForLastWin32Error()); + } + } + } +} diff --git a/projecttemplates/DotNetOpenAuth Starter Kits.vscontent b/vsi/DotNetOpenAuth Starter Kits.vscontent index d084bb1..320e491 100644 --- a/projecttemplates/DotNetOpenAuth Starter Kits.vscontent +++ b/vsi/DotNetOpenAuth Starter Kits.vscontent @@ -4,7 +4,7 @@ <DisplayName>ASP.NET OpenID-InfoCard RP</DisplayName> <Description>An ASP.NET web forms web site that accepts OpenID and InfoCard logins</Description> <FileContentType>VSTemplate</FileContentType> - <ContentVersion>$version$</ContentVersion> + <ContentVersion>2.0</ContentVersion> <Attributes> <Attribute name="ProjectType" value="Visual C#"/> <Attribute name="ProjectSubType" value="Web"/> @@ -14,9 +14,9 @@ <Content> <FileName>MvcRelyingParty.zip</FileName> <DisplayName>ASP.NET MVC OpenID-InfoCard RP</DisplayName> - <Description>An ASP.NET MVC web site that accepts OpenID and InfoCard logins</Description> + <Description>An ASP.NET MVC web site that accepts OpenID logins</Description> <FileContentType>VSTemplate</FileContentType> - <ContentVersion>$version$</ContentVersion> + <ContentVersion>2.0</ContentVersion> <Attributes> <Attribute name="ProjectType" value="Visual C#"/> <Attribute name="ProjectSubType" value="Web"/> diff --git a/vsix/VSIXProject_large.png b/vsix/VSIXProject_large.png Binary files differnew file mode 100644 index 0000000..442b986 --- /dev/null +++ b/vsix/VSIXProject_large.png diff --git a/vsix/VSIXProject_small.png b/vsix/VSIXProject_small.png Binary files differnew file mode 100644 index 0000000..5789dfa --- /dev/null +++ b/vsix/VSIXProject_small.png diff --git a/vsix/extension.vsixmanifest b/vsix/extension.vsixmanifest index 0fbd2aa..a19bd8a 100644 --- a/vsix/extension.vsixmanifest +++ b/vsix/extension.vsixmanifest @@ -1,10 +1,10 @@ <?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.d2122791-8de4-4d3b-a414-7563c9a8cd6e"> - <Name>DotNetOpenAuth Project Templates</Name> + <Name>DotNetOpenAuth SDK</Name> <Author>Andrew Arnott</Author> <Version>$version$</Version> - <Description>An ASP.NET web forms web site that accepts OpenID and InfoCard logins</Description> + <Description>Resources for developing applications that use OpenID, OAuth, and InfoCard.</Description> <Locale>1033</Locale> <License>LICENSE.txt</License> <GettingStartedGuide>http://www.dotnetopenauth.net/ProjectTemplateGettingStarted</GettingStartedGuide> |