diff options
author | David Karlaš <david.karlas@xamarin.com> | 2017-02-22 14:49:05 +0300 |
---|---|---|
committer | David Karlaš <david.karlas@xamarin.com> | 2017-02-22 14:49:29 +0300 |
commit | f3fac4013a671bba3435d7b545b4b3105b7156c3 (patch) | |
tree | 0a8df38541b9378016af484f320712d0340b0960 /main/src | |
parent | 76c4205868c8e76a7c980f8f09a34b75e2114262 (diff) |
[Templating] Initial support for https://github.com/dotnet/templating format and DotNetCore templates port
Diffstat (limited to 'main/src')
32 files changed, 630 insertions, 405 deletions
diff --git a/main/src/addins/MonoDevelop.DotNetCore/MonoDevelop.DotNetCore.csproj b/main/src/addins/MonoDevelop.DotNetCore/MonoDevelop.DotNetCore.csproj index f3cd2c082d..da65d22f05 100644 --- a/main/src/addins/MonoDevelop.DotNetCore/MonoDevelop.DotNetCore.csproj +++ b/main/src/addins/MonoDevelop.DotNetCore/MonoDevelop.DotNetCore.csproj @@ -10,6 +10,9 @@ <RootNamespace>MonoDevelop.DotNetCore</RootNamespace> <AssemblyName>MonoDevelop.DotNetCore</AssemblyName> <TargetFrameworkVersion>v4.6</TargetFrameworkVersion> + <MonoLauncher Condition=" '$(VisualStudioVersion)' == '' ">mono </MonoLauncher> + <NuGetUrl>https://dotnet.myget.org/F/templating/api/v2/package/</NuGetUrl> + <TemplatesVersion>1.0.0-beta1-20170216-123</TemplatesVersion> </PropertyGroup> <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> <DebugSymbols>true</DebugSymbols> @@ -109,12 +112,7 @@ </ItemGroup> <ItemGroup> <Folder Include="MonoDevelop.DotNetCore\" /> - <Folder Include="Templates\" /> - <Folder Include="Templates\Projects\" /> - <Folder Include="Templates\Projects\Console\" /> <Folder Include="MonoDevelop.DotNetCore.Templating\" /> - <Folder Include="Templates\Projects\Library\" /> - <Folder Include="Templates\Projects\EmptyWeb\" /> <Folder Include="MonoDevelop.DotNetCore.UnitTesting\" /> </ItemGroup> <ItemGroup> @@ -165,61 +163,40 @@ </EmbeddedResource> </ItemGroup> <ItemGroup> - <None Include="Templates\Projects\Console\ConsoleProject.csproj"> - <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> - </None> - <None Include="Templates\Projects\Console\ConsoleProject.xpt.xml"> - <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> - </None> - <None Include="Templates\Projects\Console\ConsoleProject.Program.cs.xft.xml"> - <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> - </None> - <None Include="Templates\Projects\Console\ConsoleProject.Program.cs"> - <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> - </None> - <None Include="Templates\Projects\Library\LibraryProject.csproj"> - <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> - </None> - <None Include="Templates\Projects\Library\LibraryProject.MyClass.cs"> - <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> - </None> - <None Include="Templates\Projects\Library\LibraryProject.MyClass.cs.xft.xml"> - <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> - </None> - <None Include="Templates\Projects\Library\LibraryProject.xpt.xml"> - <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> - </None> - <None Include="Templates\Projects\EmptyWeb\EmptyWebProject.csproj"> - <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> - </None> - <None Include="Templates\Projects\EmptyWeb\EmptyWebProject.Program.cs"> - <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> - </None> - <None Include="Templates\Projects\EmptyWeb\EmptyWebProject.Program.cs.xft.xml"> - <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> - </None> - <None Include="Templates\Projects\EmptyWeb\EmptyWebProject.xpt.xml"> - <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> - </None> - <None Include="Templates\Projects\EmptyWeb\EmptyWebProject.Startup.cs.xft.xml"> - <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> - </None> - <None Include="Templates\Projects\EmptyWeb\EmptyWebProject.Startup.cs"> - <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> - </None> <None Include="packages.config" /> - <None Include="Templates\Projects\XUnitTest\XUnitTestProject.Test.cs.xft.xml"> - <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> - </None> - <None Include="Templates\Projects\XUnitTest\XUnitTestProject.csproj"> - <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> - </None> - <None Include="Templates\Projects\XUnitTest\XUnitTestProject.xpt.xml"> - <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> - </None> - <None Include="Templates\Projects\XUnitTest\XUnitTestProject.Test.cs"> - <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> - </None> + <None Include="pull-package.cs" /> </ItemGroup> <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" /> + <Target Name="CompilePullPackage" Inputs="pull-package.cs" Outputs="pull-package.exe"> + <Csc Sources="pull-package.cs" OutputAssembly="pull-package.exe" ToolExe="$(CscToolExe)" ToolPath="$(CscToolPath)" /> + </Target> + <Target Name="DownloadTemplates" BeforeTargets="Build" DependsOnTargets="CompilePullPackage"> + <ItemGroup> + <NuGetPackage Include="Microsoft.DotNet.Common.ProjectTemplates.1.x"> + <Url>$(NuGetUrl)Microsoft.DotNet.Common.ProjectTemplates.1.x/$(TemplatesVersion)</Url> + <OutputPackage>$(OutputPath)Templates\Microsoft.DotNet.Common.ProjectTemplates.1.x.$(TemplatesVersion).nupkg</OutputPackage> + </NuGetPackage> + <NuGetPackage Include="Microsoft.DotNet.Common.ProjectTemplates.2.0"> + <Url>$(NuGetUrl)Microsoft.DotNet.Common.ProjectTemplates.2.0/$(TemplatesVersion)</Url> + <OutputPackage>$(OutputPath)Templates\Microsoft.DotNet.Common.ProjectTemplates.2.0.$(TemplatesVersion).nupkg</OutputPackage> + </NuGetPackage> + <NuGetPackage Include="Microsoft.DotNet.Test.ProjectTemplates.1.x"> + <Url>$(NuGetUrl)Microsoft.DotNet.Test.ProjectTemplates.1.x/$(TemplatesVersion)</Url> + <OutputPackage>$(OutputPath)Templates\Microsoft.DotNet.Test.ProjectTemplates.1.x.$(TemplatesVersion).nupkg</OutputPackage> + </NuGetPackage> + <NuGetPackage Include="Microsoft.DotNet.Test.ProjectTemplates.2.0"> + <Url>$(NuGetUrl)Microsoft.DotNet.Test.ProjectTemplates.2.0/$(TemplatesVersion)</Url> + <OutputPackage>$(OutputPath)Templates\Microsoft.DotNet.Test.ProjectTemplates.2.0.$(TemplatesVersion).nupkg</OutputPackage> + </NuGetPackage> + <NuGetPackage Include="Microsoft.DotNet.Web.ProjectTemplates.1.x"> + <Url>$(NuGetUrl)Microsoft.DotNet.Web.ProjectTemplates.1.x/$(TemplatesVersion)</Url> + <OutputPackage>$(OutputPath)Templates\Microsoft.DotNet.Web.ProjectTemplates.1.x.$(TemplatesVersion).nupkg</OutputPackage> + </NuGetPackage> + <NuGetPackage Include="Microsoft.DotNet.Web.ProjectTemplates.2.0"> + <Url>$(NuGetUrl)Microsoft.DotNet.Web.ProjectTemplates.2.0/$(TemplatesVersion)</Url> + <OutputPackage>$(OutputPath)Templates\Microsoft.DotNet.Web.ProjectTemplates.2.0.$(TemplatesVersion).nupkg</OutputPackage> + </NuGetPackage> + </ItemGroup> + <Exec Command="$(MonoLauncher)$(MSBuildProjectDirectory)\pull-package.exe %(NuGetPackage.Url) %(NuGetPackage.OutputPackage)" Condition="!Exists('%(NuGetPackage.OutputPackage)')" WorkingDirectory="$(MSBuildProjectDirectory)" /> + </Target> </Project>
\ No newline at end of file diff --git a/main/src/addins/MonoDevelop.DotNetCore/Properties/MonoDevelop.DotNetCore.addin.xml b/main/src/addins/MonoDevelop.DotNetCore/Properties/MonoDevelop.DotNetCore.addin.xml index 6be9fdd51f..9d55c0f3df 100644 --- a/main/src/addins/MonoDevelop.DotNetCore/Properties/MonoDevelop.DotNetCore.addin.xml +++ b/main/src/addins/MonoDevelop.DotNetCore/Properties/MonoDevelop.DotNetCore.addin.xml @@ -18,19 +18,67 @@ </Category> </Extension> - <Extension path="/MonoDevelop/Ide/ProjectTemplates"> - <ProjectTemplate - id="DotNetCoreConsoleProject" - file="Templates/Projects/Console/ConsoleProject.xpt.xml" /> - <ProjectTemplate - id="DotNetCoreLibraryProject" - file="Templates/Projects/Library/LibraryProject.xpt.xml" /> - <ProjectTemplate - id="DotNetCoreEmptyWebProject" - file="Templates/Projects/EmptyWeb/EmptyWebProject.xpt.xml" /> - <ProjectTemplate - id="DotNetCoreEmptyWebProject" - file="Templates/Projects/XUnitTest/XUnitTestProject.xpt.xml" /> + <Extension path="/MonoDevelop/Ide/Templates"> + <Template + id="Microsoft.Common.Console.CSharp" + path="Templates/Microsoft.DotNet.Common.ProjectTemplates.1.x.1.0.0-beta1-20170216-123.nupkg" + icon="md-console-project" + imageId="md-console-project" + category="netcore/app/general"/> + <Template + id="Microsoft.Common.Console.FSharp" + path="Templates/Microsoft.DotNet.Common.ProjectTemplates.1.x.1.0.0-beta1-20170216-123.nupkg" + icon="md-console-project" + imageId="md-console-project" + category="netcore/app/general"/> + <Template + id="Microsoft.Common.Library.CSharp" + path="Templates/Microsoft.DotNet.Common.ProjectTemplates.1.x.1.0.0-beta1-20170216-123.nupkg" + icon="md-library-project" + imageId="md-library-project" + category="netcore/library/general" /> + <Template + id="Microsoft.Common.Library.FSharp" + path="Templates/Microsoft.DotNet.Common.ProjectTemplates.1.x.1.0.0-beta1-20170216-123.nupkg" + icon="md-library-project" + imageId="md-library-project" + category="netcore/library/general" /> + <Template + id="Microsoft.Test.xUnit.CSharp" + path="Templates/Microsoft.DotNet.Test.ProjectTemplates.1.x.1.0.0-beta1-20170216-123.nupkg" + icon="md-test-project" + imageId="md-test-project" + category="netcore/test/general" /> + <Template + id="Microsoft.Test.xUnit.FSharp" + path="Templates/Microsoft.DotNet.Test.ProjectTemplates.1.x.1.0.0-beta1-20170216-123.nupkg" + icon="md-test-project" + imageId="md-test-project" + category="netcore/test/general" /> + <Template + id="Microsoft.Web.Empty.CSharp" + path="Templates/Microsoft.DotNet.Web.ProjectTemplates.1.x.1.0.0-beta1-20170216-123.nupkg" + icon="md-aspnet-empty-project" + imageId="md-aspnet-empty-project" + category="netcore/app/aspnet" /> + <Template + id="Microsoft.Web.Mvc.CSharp" + path="Templates/Microsoft.DotNet.Web.ProjectTemplates.1.x.1.0.0-beta1-20170216-123.nupkg" + icon="md-aspnet-empty-project" + imageId="md-aspnet-empty-project" + category="netcore/app/aspnet" /> + <Template + id="Microsoft.Web.Mvc.FSharp" + path="Templates/Microsoft.DotNet.Web.ProjectTemplates.1.x.1.0.0-beta1-20170216-123.nupkg" + icon="md-aspnet-empty-project" + imageId="md-aspnet-empty-project" + category="netcore/app/aspnet" /> + <Template + id="Microsoft.Web.WebApi.CSharp" + path="Templates/Microsoft.DotNet.Web.ProjectTemplates.1.x.1.0.0-beta1-20170216-123.nupkg" + icon="md-aspnet-empty-project" + imageId="md-aspnet-empty-project" + category="netcore/app/aspnet" /> </Extension> <Extension path="/MonoDevelop/Ide/ProjectTemplateWizards"> diff --git a/main/src/addins/MonoDevelop.DotNetCore/Templates/Projects/Console/ConsoleProject.Program.cs b/main/src/addins/MonoDevelop.DotNetCore/Templates/Projects/Console/ConsoleProject.Program.cs deleted file mode 100755 index c81448f540..0000000000 --- a/main/src/addins/MonoDevelop.DotNetCore/Templates/Projects/Console/ConsoleProject.Program.cs +++ /dev/null @@ -1,9 +0,0 @@ -using System; - -class Program -{ - static void Main(string[] args) - { - Console.WriteLine("Hello World!"); - } -} diff --git a/main/src/addins/MonoDevelop.DotNetCore/Templates/Projects/Console/ConsoleProject.Program.cs.xft.xml b/main/src/addins/MonoDevelop.DotNetCore/Templates/Projects/Console/ConsoleProject.Program.cs.xft.xml deleted file mode 100644 index f48622775d..0000000000 --- a/main/src/addins/MonoDevelop.DotNetCore/Templates/Projects/Console/ConsoleProject.Program.cs.xft.xml +++ /dev/null @@ -1,19 +0,0 @@ -<?xml version="1.0"?> -<Template - originator="Matt Ward" - created="2015/09/22" - lastModified="2015/09/22"> - - <TemplateConfiguration> - <_Name>Console Program.cs</_Name> - </TemplateConfiguration> - - <TemplateFiles> - <File - name="Program.cs" - DefaultName="Program.cs" - src="ConsoleProject.Program.cs" - BuildAction="Compile" - AddStandardHeader="True" /> - </TemplateFiles> -</Template>
\ No newline at end of file diff --git a/main/src/addins/MonoDevelop.DotNetCore/Templates/Projects/Console/ConsoleProject.csproj b/main/src/addins/MonoDevelop.DotNetCore/Templates/Projects/Console/ConsoleProject.csproj deleted file mode 100644 index 5e1611f89d..0000000000 --- a/main/src/addins/MonoDevelop.DotNetCore/Templates/Projects/Console/ConsoleProject.csproj +++ /dev/null @@ -1,8 +0,0 @@ -<Project Sdk="Microsoft.NET.Sdk"> - - <PropertyGroup> - <OutputType>Exe</OutputType> - <TargetFramework>netcoreapp1.0</TargetFramework> - </PropertyGroup> - -</Project> diff --git a/main/src/addins/MonoDevelop.DotNetCore/Templates/Projects/Console/ConsoleProject.xpt.xml b/main/src/addins/MonoDevelop.DotNetCore/Templates/Projects/Console/ConsoleProject.xpt.xml deleted file mode 100644 index 6b34e03785..0000000000 --- a/main/src/addins/MonoDevelop.DotNetCore/Templates/Projects/Console/ConsoleProject.xpt.xml +++ /dev/null @@ -1,23 +0,0 @@ -<?xml version="1.0"?> -<Template - originator="Matt Ward" - created="06/09/2015" - lastModified="31/10/2016"> - - <TemplateConfiguration> - <_Name>Console Application (.NET Core)</_Name> - <Category>netcore/app/general</Category> - <Icon>md-console-project</Icon> - <Image id="md-console-project" /> - <LanguageName>C#</LanguageName> - <_Description>Creates a new .NET Core console project.</_Description> - <DefaultFilename>ConsoleProject</DefaultFilename> - <Wizard>MonoDevelop.DotNetCore.ProjectTemplateWizard</Wizard> - <DefaultParameters>Template=ConsoleProject;OpenFile=Program.cs;Files=Program.cs;ExternalConsole=true</DefaultParameters> - </TemplateConfiguration> - - <Combine name="${ProjectName}" directory="."> - <Project name="${ProjectName}" type="C#" directory="./" if="CreateDotNetCoreProject"> - </Project> - </Combine> -</Template>
\ No newline at end of file diff --git a/main/src/addins/MonoDevelop.DotNetCore/Templates/Projects/EmptyWeb/EmptyWebProject.Program.cs b/main/src/addins/MonoDevelop.DotNetCore/Templates/Projects/EmptyWeb/EmptyWebProject.Program.cs deleted file mode 100755 index 9046074545..0000000000 --- a/main/src/addins/MonoDevelop.DotNetCore/Templates/Projects/EmptyWeb/EmptyWebProject.Program.cs +++ /dev/null @@ -1,24 +0,0 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Threading.Tasks; -using Microsoft.AspNetCore.Hosting; - -namespace ${Namespace} -{ - public class Program - { - public static void Main(string[] args) - { - var host = new WebHostBuilder() - .UseKestrel() - .UseContentRoot(Directory.GetCurrentDirectory()) - .UseIISIntegration() - .UseStartup<Startup>() - .Build(); - - host.Run(); - } - } -}
\ No newline at end of file diff --git a/main/src/addins/MonoDevelop.DotNetCore/Templates/Projects/EmptyWeb/EmptyWebProject.Program.cs.xft.xml b/main/src/addins/MonoDevelop.DotNetCore/Templates/Projects/EmptyWeb/EmptyWebProject.Program.cs.xft.xml deleted file mode 100644 index 4bb9067fc2..0000000000 --- a/main/src/addins/MonoDevelop.DotNetCore/Templates/Projects/EmptyWeb/EmptyWebProject.Program.cs.xft.xml +++ /dev/null @@ -1,19 +0,0 @@ -<?xml version="1.0"?> -<Template - originator="Matt Ward" - created="2015/09/22" - lastModified="2015/09/22"> - - <TemplateConfiguration> - <_Name>Empty web Program.cs</_Name> - </TemplateConfiguration> - - <TemplateFiles> - <File - name="Program.cs" - DefaultName="Program.cs" - src="EmptyWebProject.Program.cs" - BuildAction="Compile" - AddStandardHeader="True" /> - </TemplateFiles> -</Template>
\ No newline at end of file diff --git a/main/src/addins/MonoDevelop.DotNetCore/Templates/Projects/EmptyWeb/EmptyWebProject.Startup.cs b/main/src/addins/MonoDevelop.DotNetCore/Templates/Projects/EmptyWeb/EmptyWebProject.Startup.cs deleted file mode 100755 index 857cd56db1..0000000000 --- a/main/src/addins/MonoDevelop.DotNetCore/Templates/Projects/EmptyWeb/EmptyWebProject.Startup.cs +++ /dev/null @@ -1,37 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; -using Microsoft.AspNetCore.Builder; -using Microsoft.AspNetCore.Hosting; -using Microsoft.AspNetCore.Http; -using Microsoft.Extensions.DependencyInjection; -using Microsoft.Extensions.Logging; - -namespace ${Namespace} -{ - public class Startup - { - // This method gets called by the runtime. Use this method to add services to the container. - // For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940 - public void ConfigureServices(IServiceCollection services) - { - } - - // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. - public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) - { - loggerFactory.AddConsole(); - - if (env.IsDevelopment()) - { - app.UseDeveloperExceptionPage(); - } - - app.Run(async (context) => - { - await context.Response.WriteAsync("Hello World!"); - }); - } - } -}
\ No newline at end of file diff --git a/main/src/addins/MonoDevelop.DotNetCore/Templates/Projects/EmptyWeb/EmptyWebProject.Startup.cs.xft.xml b/main/src/addins/MonoDevelop.DotNetCore/Templates/Projects/EmptyWeb/EmptyWebProject.Startup.cs.xft.xml deleted file mode 100644 index 4bfb057a29..0000000000 --- a/main/src/addins/MonoDevelop.DotNetCore/Templates/Projects/EmptyWeb/EmptyWebProject.Startup.cs.xft.xml +++ /dev/null @@ -1,19 +0,0 @@ -<?xml version="1.0"?> -<Template - originator="Matt Ward" - created="2015/09/22" - lastModified="2015/09/22"> - - <TemplateConfiguration> - <_Name>Empty web Startup.cs</_Name> - </TemplateConfiguration> - - <TemplateFiles> - <File - name="Startup.cs" - DefaultName="Startup.cs" - src="EmptyWebProject.Startup.cs" - BuildAction="Compile" - AddStandardHeader="True" /> - </TemplateFiles> -</Template>
\ No newline at end of file diff --git a/main/src/addins/MonoDevelop.DotNetCore/Templates/Projects/EmptyWeb/EmptyWebProject.csproj b/main/src/addins/MonoDevelop.DotNetCore/Templates/Projects/EmptyWeb/EmptyWebProject.csproj deleted file mode 100644 index f71ef36b61..0000000000 --- a/main/src/addins/MonoDevelop.DotNetCore/Templates/Projects/EmptyWeb/EmptyWebProject.csproj +++ /dev/null @@ -1,11 +0,0 @@ -<Project Sdk="Microsoft.NET.Sdk.Web"> - - <PropertyGroup> - <TargetFramework>netcoreapp1.0</TargetFramework> - </PropertyGroup> - - <ItemGroup> - <PackageReference Include="Microsoft.AspNetCore" Version="1.0.3" /> - </ItemGroup> - -</Project> diff --git a/main/src/addins/MonoDevelop.DotNetCore/Templates/Projects/EmptyWeb/EmptyWebProject.xpt.xml b/main/src/addins/MonoDevelop.DotNetCore/Templates/Projects/EmptyWeb/EmptyWebProject.xpt.xml deleted file mode 100644 index 35b5311939..0000000000 --- a/main/src/addins/MonoDevelop.DotNetCore/Templates/Projects/EmptyWeb/EmptyWebProject.xpt.xml +++ /dev/null @@ -1,23 +0,0 @@ -<?xml version="1.0"?> -<Template - originator="Matt Ward" - created="06/09/2015" - lastModified="31/10/2016"> - - <TemplateConfiguration> - <_Name>ASP.NET Core Empty Web Application</_Name> - <Category>netcore/app/aspnet</Category> - <Icon>md-aspnet-empty-project</Icon> - <Image id="md-aspnet-empty-project" /> - <LanguageName>C#</LanguageName> - <_Description>Creates a new ASP.NET Core web project.</_Description> - <DefaultFilename>WebApp</DefaultFilename> - <Wizard>MonoDevelop.DotNetCore.ProjectTemplateWizard</Wizard> - <DefaultParameters>Template=EmptyWebProject;CreateWebRoot=true;OpenFile=Startup.cs;Files=Startup.cs|Program.cs</DefaultParameters> - </TemplateConfiguration> - - <Combine name="${ProjectName}" directory="."> - <Project name="${ProjectName}" type="C#" directory="./src" if="CreateDotNetCoreProject"> - </Project> - </Combine> -</Template>
\ No newline at end of file diff --git a/main/src/addins/MonoDevelop.DotNetCore/Templates/Projects/Library/LibraryProject.MyClass.cs b/main/src/addins/MonoDevelop.DotNetCore/Templates/Projects/Library/LibraryProject.MyClass.cs deleted file mode 100755 index fc20e2f546..0000000000 --- a/main/src/addins/MonoDevelop.DotNetCore/Templates/Projects/Library/LibraryProject.MyClass.cs +++ /dev/null @@ -1,11 +0,0 @@ -using System; - -namespace ${Namespace} -{ - public class MyClass - { - public MyClass() - { - } - } -} diff --git a/main/src/addins/MonoDevelop.DotNetCore/Templates/Projects/Library/LibraryProject.MyClass.cs.xft.xml b/main/src/addins/MonoDevelop.DotNetCore/Templates/Projects/Library/LibraryProject.MyClass.cs.xft.xml deleted file mode 100644 index 3f7e462005..0000000000 --- a/main/src/addins/MonoDevelop.DotNetCore/Templates/Projects/Library/LibraryProject.MyClass.cs.xft.xml +++ /dev/null @@ -1,19 +0,0 @@ -<?xml version="1.0"?> -<Template - originator="Matt Ward" - created="2015/09/13" - lastModified="2015/09/13"> - - <TemplateConfiguration> - <_Name>Library MyClass.cs</_Name> - </TemplateConfiguration> - - <TemplateFiles> - <File - name="MyClass.cs" - DefaultName="MyClass.cs" - src="LibraryProject.MyClass.cs" - BuildAction="Compile" - AddStandardHeader="True" /> - </TemplateFiles> -</Template>
\ No newline at end of file diff --git a/main/src/addins/MonoDevelop.DotNetCore/Templates/Projects/Library/LibraryProject.csproj b/main/src/addins/MonoDevelop.DotNetCore/Templates/Projects/Library/LibraryProject.csproj deleted file mode 100644 index 20861435dc..0000000000 --- a/main/src/addins/MonoDevelop.DotNetCore/Templates/Projects/Library/LibraryProject.csproj +++ /dev/null @@ -1,7 +0,0 @@ -<Project Sdk="Microsoft.NET.Sdk"> - - <PropertyGroup> - <TargetFramework>netstandard1.4</TargetFramework> - </PropertyGroup> - -</Project> diff --git a/main/src/addins/MonoDevelop.DotNetCore/Templates/Projects/Library/LibraryProject.xpt.xml b/main/src/addins/MonoDevelop.DotNetCore/Templates/Projects/Library/LibraryProject.xpt.xml deleted file mode 100644 index 529ca1fd7c..0000000000 --- a/main/src/addins/MonoDevelop.DotNetCore/Templates/Projects/Library/LibraryProject.xpt.xml +++ /dev/null @@ -1,23 +0,0 @@ -<?xml version="1.0"?> -<Template - originator="Matt Ward" - created="12/09/2015" - lastModified="31/10/2016"> - - <TemplateConfiguration> - <_Name>Class Library (.NET Core)</_Name> - <Category>netcore/library/general</Category> - <Icon>md-library-project</Icon> - <Image id="md-library-project" /> - <LanguageName>C#</LanguageName> - <_Description>Creates a new .NET Core class library project.</_Description> - <DefaultFilename>ClassLibrary</DefaultFilename> - <Wizard>MonoDevelop.DotNetCore.ProjectTemplateWizard</Wizard> - <DefaultParameters>Template=LibraryProject;OpenFile=MyClass.cs;Files=MyClass.cs</DefaultParameters> - </TemplateConfiguration> - - <Combine name="${ProjectName}" directory="."> - <Project name="${ProjectName}" type="C#" directory="./" if="CreateDotNetCoreProject"> - </Project> - </Combine> -</Template>
\ No newline at end of file diff --git a/main/src/addins/MonoDevelop.DotNetCore/Templates/Projects/XUnitTest/XUnitTestProject.Test.cs b/main/src/addins/MonoDevelop.DotNetCore/Templates/Projects/XUnitTest/XUnitTestProject.Test.cs deleted file mode 100755 index 02156e0bbb..0000000000 --- a/main/src/addins/MonoDevelop.DotNetCore/Templates/Projects/XUnitTest/XUnitTestProject.Test.cs +++ /dev/null @@ -1,13 +0,0 @@ -using System; -using Xunit; - -namespace ${Namespace} -{ - public class Test - { - [Fact] - public void TestCase() - { - } - } -} diff --git a/main/src/addins/MonoDevelop.DotNetCore/Templates/Projects/XUnitTest/XUnitTestProject.Test.cs.xft.xml b/main/src/addins/MonoDevelop.DotNetCore/Templates/Projects/XUnitTest/XUnitTestProject.Test.cs.xft.xml deleted file mode 100644 index 2f41bb949e..0000000000 --- a/main/src/addins/MonoDevelop.DotNetCore/Templates/Projects/XUnitTest/XUnitTestProject.Test.cs.xft.xml +++ /dev/null @@ -1,19 +0,0 @@ -<?xml version="1.0"?> -<Template - originator="Matt Ward" - created="2017/02/07" - lastModified="2017/02/07"> - - <TemplateConfiguration> - <_Name>Xunit Test.cs</_Name> - </TemplateConfiguration> - - <TemplateFiles> - <File - name="Test.cs" - DefaultName="Test.cs" - src="XUnitTestProject.Test.cs" - BuildAction="Compile" - AddStandardHeader="True" /> - </TemplateFiles> -</Template>
\ No newline at end of file diff --git a/main/src/addins/MonoDevelop.DotNetCore/Templates/Projects/XUnitTest/XUnitTestProject.csproj b/main/src/addins/MonoDevelop.DotNetCore/Templates/Projects/XUnitTest/XUnitTestProject.csproj deleted file mode 100644 index 6c4af8a52a..0000000000 --- a/main/src/addins/MonoDevelop.DotNetCore/Templates/Projects/XUnitTest/XUnitTestProject.csproj +++ /dev/null @@ -1,13 +0,0 @@ -<Project Sdk="Microsoft.NET.Sdk"> - - <PropertyGroup> - <TargetFramework>netcoreapp1.0</TargetFramework> - </PropertyGroup> - - <ItemGroup> - <PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.0.0-preview-20170123-02" /> - <PackageReference Include="xunit" Version="2.2.0-beta5-build3474" /> - <PackageReference Include="xunit.runner.visualstudio" Version="2.2.0-beta5-build1225" /> - </ItemGroup> - -</Project> diff --git a/main/src/addins/MonoDevelop.DotNetCore/Templates/Projects/XUnitTest/XUnitTestProject.xpt.xml b/main/src/addins/MonoDevelop.DotNetCore/Templates/Projects/XUnitTest/XUnitTestProject.xpt.xml deleted file mode 100644 index f0f55cd3d6..0000000000 --- a/main/src/addins/MonoDevelop.DotNetCore/Templates/Projects/XUnitTest/XUnitTestProject.xpt.xml +++ /dev/null @@ -1,23 +0,0 @@ -<?xml version="1.0"?> -<Template - originator="Matt Ward" - created="12/09/2015" - lastModified="31/10/2016"> - - <TemplateConfiguration> - <_Name>xUnit Library (.NET Core)</_Name> - <Category>netcore/test/general</Category> - <Icon>md-test-project</Icon> - <Image id="md-test-project" /> - <LanguageName>C#</LanguageName> - <_Description>Creates a new xUnit test project.</_Description> - <DefaultFilename>ClassLibrary</DefaultFilename> - <Wizard>MonoDevelop.DotNetCore.ProjectTemplateWizard</Wizard> - <DefaultParameters>Template=XUnitTestProject;OpenFile=Test.cs;Files=Test.cs</DefaultParameters> - </TemplateConfiguration> - - <Combine name="${ProjectName}" directory="."> - <Project name="${ProjectName}" type="C#" directory="./" if="CreateDotNetCoreProject"> - </Project> - </Combine> -</Template>
\ No newline at end of file diff --git a/main/src/addins/MonoDevelop.DotNetCore/pull-package.cs b/main/src/addins/MonoDevelop.DotNetCore/pull-package.cs new file mode 100644 index 0000000000..15eaedd2a2 --- /dev/null +++ b/main/src/addins/MonoDevelop.DotNetCore/pull-package.cs @@ -0,0 +1,53 @@ +using System; +using System.IO; +using System.Linq; +using System.Net; + +public class App +{ + static string CacheDirectory { + get { + return Path.Combine ( + Environment.GetFolderPath (Environment.SpecialFolder.Personal), + "Cache", + "xs-compilation" + ); + } + } + + public static int Main (string [] args) + { + //Reason for this cache is not to save time on downloading file on fresh build + //but in case downloading fails/you don't have internet connection it uses old cache + //so this cache should probably be called backup :) + + var sourceUrl = new Uri (args [0]); + var destFile = args [1]; + var cachePath = Path.Combine (CacheDirectory, Path.GetFileName (destFile)); + var cacheTmpPath = cachePath + ".tmp"; + + Console.WriteLine ("Creating directories: {0} and {1}", CacheDirectory, Path.GetDirectoryName (destFile)); + Directory.CreateDirectory (CacheDirectory); + Directory.CreateDirectory (Path.GetDirectoryName (destFile)); + + Console.WriteLine ("Downloading file: '{0}' to cache at '{1}'", sourceUrl, cachePath); + try { + WebClient wc = new WebClient (); + wc.DownloadFile (sourceUrl, cacheTmpPath); + File.Delete (cachePath); + File.Move (cacheTmpPath, cachePath); + } catch (Exception ex) { + Console.WriteLine ("Could not download the package from {0}. {1}", sourceUrl, ex); + } + + if (File.Exists (cachePath)) { + Console.WriteLine ("Using the file from the cache directory. Copying {0} to {1}", cachePath, destFile); + File.Delete (destFile); + File.Copy (cachePath, destFile); + return 0; + } else { + Console.WriteLine ("The file was not found in the cache directory... failing"); + return 1; + } + } +}
\ No newline at end of file diff --git a/main/src/core/MonoDevelop.Ide/ExtensionModel/Templates.addin.xml b/main/src/core/MonoDevelop.Ide/ExtensionModel/Templates.addin.xml index c3e112602f..e936cf1dc5 100644 --- a/main/src/core/MonoDevelop.Ide/ExtensionModel/Templates.addin.xml +++ b/main/src/core/MonoDevelop.Ide/ExtensionModel/Templates.addin.xml @@ -21,6 +21,11 @@ <ExtensionNode name="ProjectTemplate" type="MonoDevelop.Ide.Codons.ProjectTemplateCodon"/> </ExtensionPoint> +<ExtensionPoint path = "/MonoDevelop/Ide/Templates" name = "Microsoft Templating Engine templates"> + <Description>Microsoft templating engine project templates to be shown in the New Project dialog.</Description> + <ExtensionNode name="Template" type="MonoDevelop.Ide.Codons.TemplateExtensionNode"/> +</ExtensionPoint> + <ExtensionPoint path = "/MonoDevelop/Ide/ProjectTemplatePackageInstallers" name = "Project template package installers"> <Description>Installs packages defined in the project template. Must implement MonoDevelop.Ide.Templates.ProjectTemplatePackageInstaller</Description> <ExtensionNode name="Class" /> @@ -121,6 +126,7 @@ <Extension path="/MonoDevelop/Ide/ProjectTemplatingProviders"> <Class id="MonoDevelop.ProjectTemplatingProvider" class="MonoDevelop.Ide.Templates.ProjectTemplatingProvider" /> + <Class id="MonoDevelop.MicrosoftTemplateEngineProjectTemplatingProvider" class="MonoDevelop.Ide.Templates.MicrosoftTemplateEngineProjectTemplatingProvider" /> </Extension> <Extension path="/MonoDevelop/Ide/TemplateImages"> diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Codons/TemplateExtensionNode.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Codons/TemplateExtensionNode.cs new file mode 100644 index 0000000000..daa551b072 --- /dev/null +++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Codons/TemplateExtensionNode.cs @@ -0,0 +1,72 @@ +// +// TemplateExtensionNode.cs +// +// Author: +// David Karlaš <david.karlas@xamarin.com> +// +// Copyright (c) 2017 Xamarin, Inc (http://www.xamarin.com) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +using System; +using Mono.Addins; + +namespace MonoDevelop.Ide.Codons +{ + [ExtensionNode (Description = "Template informations.")] + internal class TemplateExtensionNode : ExtensionNode + { + [NodeAttribute ("category", "Category used to place template into correct category inside new project dialog.")] + string category; + + public string Category { + get { + return category; + } + } + + [NodeAttribute ("path", "Either .nupkg file or folder.")] + string path; + + public string ScanPath { + get { + return Addin.GetFilePath (path); + } + } + + + [NodeAttribute ("icon", "Icon to display in new project dialog.")] + string icon; + + public string Icon { + get { + return ImageService.GetStockId (Addin, icon, Gtk.IconSize.Dnd); + } + } + + + [NodeAttribute ("imageId", "ImageId of image showed in new project dialog description of project.")] + string imageId; + + public string ImageId { + get { + return imageId; + } + } + } +} diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Projects/NewProjectController.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Projects/NewProjectController.cs index 41a7c7c4ea..c277db2a9b 100644 --- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Projects/NewProjectController.cs +++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Projects/NewProjectController.cs @@ -573,7 +573,7 @@ namespace MonoDevelop.Ide.Projects if (wizardProvider.HasWizard)
wizardProvider.BeforeProjectIsCreated ();
- if (!CreateProject ())
+ if (!await CreateProject ())
return;
Solution parentSolution = null;
@@ -679,7 +679,7 @@ namespace MonoDevelop.Ide.Projects .ToList ();
}
- bool CreateProject ()
+ async Task<bool> CreateProject ()
{
if (!projectConfiguration.IsValid ()) {
MessageService.ShowError (projectConfiguration.GetErrorMessage ());
@@ -724,7 +724,7 @@ namespace MonoDevelop.Ide.Projects DisposeExistingNewItems ();
try {
- result = IdeApp.Services.TemplatingService.ProcessTemplate (template, projectConfiguration, ParentFolder);
+ result = await IdeApp.Services.TemplatingService.ProcessTemplate (template, projectConfiguration, ParentFolder);
if (!result.WorkspaceItems.Any ())
return false;
} catch (UserException ex) {
diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Templates/IProjectTemplatingProvider.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Templates/IProjectTemplatingProvider.cs index 79c81bbb0c..52fae3978e 100644 --- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Templates/IProjectTemplatingProvider.cs +++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Templates/IProjectTemplatingProvider.cs @@ -25,6 +25,7 @@ // THE SOFTWARE.
using System.Collections.Generic;
+using System.Threading.Tasks;
using MonoDevelop.Ide.Projects;
using MonoDevelop.Projects;
@@ -35,7 +36,7 @@ namespace MonoDevelop.Ide.Templates IEnumerable<SolutionTemplate> GetTemplates ();
bool CanProcessTemplate (SolutionTemplate template);
- ProcessedTemplateResult ProcessTemplate (SolutionTemplate template, NewProjectConfiguration config, SolutionFolder parentFolder);
+ Task<ProcessedTemplateResult> ProcessTemplate (SolutionTemplate template, NewProjectConfiguration config, SolutionFolder parentFolder);
}
}
diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Templates/MicrosoftTemplateEngineProcessedTemplateResult.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Templates/MicrosoftTemplateEngineProcessedTemplateResult.cs new file mode 100644 index 0000000000..c977bcf200 --- /dev/null +++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Templates/MicrosoftTemplateEngineProcessedTemplateResult.cs @@ -0,0 +1,67 @@ +// +// MicrosoftTemplateEngineProcessedTemplateResult.cs +// +// Author: +// David Karlaš <david.karlas@xamarin.com> +// +// Copyright (c) 2017 Xamarin, Inc (http://www.xamarin.com) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +using System; +using System.Collections.Generic; +using Microsoft.TemplateEngine.Edge.Template; +using MonoDevelop.Projects; + +namespace MonoDevelop.Ide.Templates +{ + class MicrosoftTemplateEngineProcessedTemplateResult : ProcessedTemplateResult + { + readonly IWorkspaceFileObject[] workspaceItems; + + public MicrosoftTemplateEngineProcessedTemplateResult (IWorkspaceFileObject[] workspaceItems, string solutionFileName, string projectBasePath) + { + this.workspaceItems = workspaceItems; + this.SolutionFileName = solutionFileName; + this.ProjectBasePath = projectBasePath; + } + + public override IEnumerable<string> Actions { + get { + yield break; + } + } + + public override IList<PackageReferencesForCreatedProject> PackageReferences { + get { + throw new NotImplementedException (); + } + } + + public override IEnumerable<IWorkspaceFileObject> WorkspaceItems { + get { + return workspaceItems; + } + } + + public override bool HasPackages () + { + return false; + } + } +} diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Templates/MicrosoftTemplateEngineProjectTemplatingProvider.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Templates/MicrosoftTemplateEngineProjectTemplatingProvider.cs new file mode 100644 index 0000000000..c037719fa2 --- /dev/null +++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Templates/MicrosoftTemplateEngineProjectTemplatingProvider.cs @@ -0,0 +1,225 @@ +// +// MicrosoftTemplateEngineProjectTemplatingProvider.cs +// +// Author: +// David Karlaš <david.karlas@xamarin.com> +// +// Copyright (c) 2017 Xamarin, Inc (http://www.xamarin.com) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +using System; +using System.Collections.Generic; +using Microsoft.TemplateEngine.Edge.Settings; +using Microsoft.TemplateEngine.Edge.Template; +using Microsoft.TemplateEngine.Utils; +using MonoDevelop.Ide.Projects; +using MonoDevelop.Projects; +using System.Linq; +using Microsoft.TemplateEngine.Orchestrator.RunnableProjects; +using MonoDevelop.Core; +using Microsoft.TemplateEngine.Edge; +using System.IO; +using Microsoft.TemplateEngine.Orchestrator.RunnableProjects.Config; +using Microsoft.TemplateEngine.Orchestrator.RunnableProjects.Macros; +using System.Threading.Tasks; +using Mono.Addins; +using MonoDevelop.Ide.Codons; +using Microsoft.TemplateEngine.Abstractions; + +namespace MonoDevelop.Ide.Templates +{ + class MicrosoftTemplateEngineProjectTemplatingProvider : IProjectTemplatingProvider + { + public bool CanProcessTemplate (SolutionTemplate template) + { + return template is MicrosoftTemplateEngineSolutionTemplate; + } + + static EngineEnvironmentSettings environmentSettings = new EngineEnvironmentSettings (new MyTemplateEngineHost (), (env) => new SettingsLoader (env)); + static TemplateCreator templateCreator = new TemplateCreator (environmentSettings); + + static bool dontUpdateCache = true; + + static MicrosoftTemplateEngineProjectTemplatingProvider () + { + AddinManager.AddExtensionNodeHandler ("/MonoDevelop/Ide/Templates", OnExtensionChanged); + dontUpdateCache = false; + UpdateCache (); + } + + static List<TemplateExtensionNode> TemplatesNodes = new List<TemplateExtensionNode> (); + static List<MicrosoftTemplateEngineSolutionTemplate> templates = new List<MicrosoftTemplateEngineSolutionTemplate> (); + + static void UpdateCache () + { + if (dontUpdateCache)//Avoid updating cache while scan paths are added during registration + return; + var paths = new Paths (environmentSettings); + + //TODO: Uncomment this IF, but also add logic to invalidate/check if new templates were added from newly installed AddOns... + //if (!paths.Exists (paths.User.BaseDir) || !paths.Exists (paths.User.FirstRunCookie)) { + var _templateCache = new TemplateCache (environmentSettings); + foreach (var scanPath in TemplatesNodes.Select (t => t.ScanPath).Distinct ()) { + _templateCache.Scan (scanPath); + } + _templateCache.WriteTemplateCaches (); + paths.WriteAllText (paths.User.FirstRunCookie, ""); + //} + var templateInfos = templateCreator.List (false, (t, s) => new MatchInfo ()).ToDictionary (m => m.Info.Identity, m => m.Info); + var newTemplates = new List<MicrosoftTemplateEngineSolutionTemplate> (); + foreach (var template in TemplatesNodes) { + ITemplateInfo templateInfo; + if (!templateInfos.TryGetValue (template.Id, out templateInfo)) { + LoggingService.LogWarning ("Template {0} not found.", template.Id); + continue; + } + newTemplates.Add (new MicrosoftTemplateEngineSolutionTemplate (template, templateInfo)); + } + templates = newTemplates; + } + + static void OnExtensionChanged (object s, ExtensionNodeEventArgs args) + { + if (args.Change == ExtensionChange.Add) { + var codon = (TemplateExtensionNode)args.ExtensionNode; + try { + TemplatesNodes.Add (codon); + } catch (Exception e) { + string extId = null, addinId = null; + if (codon != null) { + if (codon.HasId) + extId = codon.Id; + if (codon.Addin != null) + addinId = codon.Addin.Id; + } + LoggingService.LogError ("Error loading template id {0} in addin {1}:\n{2}", + extId ?? "(null)", addinId ?? "(null)", e.ToString ()); + } + } else { + foreach (var pt in TemplatesNodes) { + var codon = (TemplateExtensionNode)args.ExtensionNode; + if (pt.Id == codon.Id) { + TemplatesNodes.Remove (pt); + break; + } + } + } + UpdateCache (); + } + + public IEnumerable<SolutionTemplate> GetTemplates () + { + return templates; + } + + static MonoDevelop.Core.Instrumentation.Counter TemplateCounter = MonoDevelop.Core.Instrumentation.InstrumentationService.CreateCounter ("Template Instantiated", "Project Model", id: "Core.Template.Instantiated"); + + public async Task<ProcessedTemplateResult> ProcessTemplate (SolutionTemplate template, NewProjectConfiguration config, SolutionFolder parentFolder) + { + var templateInfo = ((MicrosoftTemplateEngineSolutionTemplate)template).templateInfo; + var workspaceItems = new List<IWorkspaceFileObject> (); + var result = await templateCreator.InstantiateAsync ( + templateInfo, + config.ProjectName, + config.GetValidProjectName (), + config.ProjectLocation, + new Dictionary<string, string> (), + true); + if (result.ResultInfo.PrimaryOutputs.Any ()) { + foreach (var res in result.ResultInfo.PrimaryOutputs) { + var fullPath = Path.Combine (config.ProjectLocation, res.Path); + //This happens if some project is excluded by modifiers, e.g. Test project disabled in wizard settings by user + if (!File.Exists (fullPath)) + continue; + workspaceItems.Add (await MonoDevelop.Projects.Services.ProjectService.ReadSolutionItem (new Core.ProgressMonitor (), fullPath)); + } + } else { + //TODO: Remove this code once https://github.com/dotnet/templating/pull/342 is released in NuGet feed and we bump NuGet version of templating engine + foreach (var path in Directory.GetFiles (config.SolutionLocation, "*.*proj", SearchOption.AllDirectories)) { + if (path.EndsWith (".csproj", StringComparison.OrdinalIgnoreCase) || path.EndsWith (".fsproj", StringComparison.OrdinalIgnoreCase) || path.EndsWith (".vbproj", StringComparison.OrdinalIgnoreCase)) + workspaceItems.Add (await MonoDevelop.Projects.Services.ProjectService.ReadSolutionItem (new Core.ProgressMonitor (), path)); + } + } + + var metadata = new Dictionary<string, string> (); + metadata ["Id"] = templateInfo.Identity; + metadata ["Name"] = templateInfo.Name; + metadata ["Language"] = template.Language; + metadata ["Platform"] = string.Join(";", templateInfo.Classifications); + TemplateCounter.Inc (1, null, metadata); + + if (parentFolder == null) { + var solution = new Solution (); + solution.SetLocation (config.SolutionLocation, config.SolutionName); + foreach (var item in workspaceItems.Cast<SolutionFolderItem> ()) { + IConfigurationTarget configurationTarget = item as IConfigurationTarget; + if (configurationTarget != null) { + foreach (ItemConfiguration configuration in configurationTarget.Configurations) { + bool flag = false; + foreach (SolutionConfiguration solutionCollection in solution.Configurations) { + if (solutionCollection.Id == configuration.Id) + flag = true; + } + if (!flag) + solution.AddConfiguration (configuration.Id, true); + } + } + solution.RootFolder.AddItem (item); + } + return new MicrosoftTemplateEngineProcessedTemplateResult (new [] { solution }, solution.FileName, config.ProjectLocation); + } else { + return new MicrosoftTemplateEngineProcessedTemplateResult (workspaceItems.ToArray (), parentFolder.ParentSolution.FileName, config.ProjectLocation); + } + } + + class MyTemplateEngineHost : DefaultTemplateEngineHost + { + public MyTemplateEngineHost () : base (BrandingService.ApplicationName, BuildInfo.CompatVersion, "en-US", new Dictionary<string, string> { { "dotnet-cli-version", "0" } }, new Dictionary<Guid, Func<Type>> + { + { new Guid("0C434DF7-E2CB-4DEE-B216-D7C58C8EB4B3"), () => typeof(RunnableProjectGenerator) }, + { new Guid("3147965A-08E5-4523-B869-02C8E9A8AAA1"), () => typeof(BalancedNestingConfig) }, + { new Guid("3E8BCBF0-D631-45BA-A12D-FBF1DE03AA38"), () => typeof(ConditionalConfig) }, + { new Guid("A1E27A4B-9608-47F1-B3B8-F70DF62DC521"), () => typeof(FlagsConfig) }, + { new Guid("3FAE1942-7257-4247-B44D-2DDE07CB4A4A"), () => typeof(IncludeConfig) }, + { new Guid("3D33B3BF-F40E-43EB-A14D-F40516F880CD"), () => typeof(RegionConfig) }, + { new Guid("62DB7F1F-A10E-46F0-953F-A28A03A81CD1"), () => typeof(ReplacementConfig) }, + { new Guid("370996FE-2943-4AED-B2F6-EC03F0B75B4A"), () => typeof(ConstantMacro) }, + { new Guid("BB625F71-6404-4550-98AF-B2E546F46C5F"), () => typeof(EvaluateMacro) }, + { new Guid("10919008-4E13-4FA8-825C-3B4DA855578E"), () => typeof(GuidMacro) }, + { new Guid("F2B423D7-3C23-4489-816A-41D8D2A98596"), () => typeof(NowMacro) }, + { new Guid("011E8DC1-8544-4360-9B40-65FD916049B7"), () => typeof(RandomMacro) }, + { new Guid("8A4D4937-E23F-426D-8398-3BDBD1873ADB"), () => typeof(RegexMacro) }, + { new Guid("B57D64E0-9B4F-4ABE-9366-711170FD5294"), () => typeof(SwitchMacro) }, + { new Guid("10919118-4E13-4FA9-825C-3B4DA855578E"), () => typeof(CaseChangeMacro) } + }.ToList ()) + { + } + + public override bool TryGetHostParamDefault (string paramName, out string value) + { + if (paramName == "HostIdentifier") { + value = this.HostIdentifier; + return true; + } + value = null; + return false; + } + } + } +} diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Templates/MicrosoftTemplateEngineSolutionTemplate.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Templates/MicrosoftTemplateEngineSolutionTemplate.cs new file mode 100644 index 0000000000..940af76b2d --- /dev/null +++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Templates/MicrosoftTemplateEngineSolutionTemplate.cs @@ -0,0 +1,64 @@ +// +// MicrosoftTemplateEngineSolutionTemplate.cs +// +// Author: +// David Karlaš <david.karlas@xamarin.com> +// +// Copyright (c) 2017 Xamarin, Inc (http://www.xamarin.com) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +using System; +using Microsoft.TemplateEngine.Abstractions; +using Microsoft.TemplateEngine.Edge.Settings; +using System.Linq; +using MonoDevelop.Ide.Codons; + +namespace MonoDevelop.Ide.Templates +{ + class MicrosoftTemplateEngineSolutionTemplate : SolutionTemplate + { + internal readonly ITemplateInfo templateInfo; + //TemplateExtensionNode template; + + internal MicrosoftTemplateEngineSolutionTemplate (TemplateExtensionNode template, ITemplateInfo templateInfo) + : base (templateInfo.Identity, templateInfo.Name, template.Icon) + { + this.templateInfo = templateInfo; + Description = templateInfo.Description; + Category = template.Category; + string language; + if (templateInfo.Tags.TryGetValue ("Language", out language)) + Language = language; + else + Language = string.Empty; + GroupId = templateInfo.GroupIdentity; + //TODO: Support all this params + //Condition = template.Condition; + //ProjectFileExtension = template.FileExtension; + //Wizard = template.WizardPath; + //SupportedParameters = template.SupportedParameters; + //DefaultParameters = template.DefaultParameters; + ImageId = template.ImageId; + //ImageFile = template.ImageFile; + //Visibility = GetVisibility (template.Visibility); + + //HasProjects = (template.SolutionDescriptor.EntryDescriptors.Length > 0); + } + } +} diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Templates/ProjectTemplatingProvider.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Templates/ProjectTemplatingProvider.cs index b47ae8a685..0b917b754f 100644 --- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Templates/ProjectTemplatingProvider.cs +++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Templates/ProjectTemplatingProvider.cs @@ -32,6 +32,7 @@ using System.Collections.Generic;
using System.Linq;
+using System.Threading.Tasks;
using MonoDevelop.Ide.Projects;
using MonoDevelop.Projects;
using MonoDevelop.Core;
@@ -52,9 +53,9 @@ namespace MonoDevelop.Ide.Templates return template is DefaultSolutionTemplate;
}
- public ProcessedTemplateResult ProcessTemplate (SolutionTemplate template, NewProjectConfiguration config, SolutionFolder parentFolder)
+ public Task<ProcessedTemplateResult> ProcessTemplate (SolutionTemplate template, NewProjectConfiguration config, SolutionFolder parentFolder)
{
- return ProcessTemplate ((DefaultSolutionTemplate)template, config, parentFolder);
+ return Task.FromResult (ProcessTemplate ((DefaultSolutionTemplate)template, config, parentFolder));
}
ProcessedTemplateResult ProcessTemplate (DefaultSolutionTemplate template, NewProjectConfiguration config, SolutionFolder parentFolder)
diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Templates/TemplatingService.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Templates/TemplatingService.cs index 575ca442db..75deb3a400 100644 --- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Templates/TemplatingService.cs +++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Templates/TemplatingService.cs @@ -27,6 +27,7 @@ using System;
using System.Collections.Generic;
using System.Linq;
+using System.Threading.Tasks;
using Mono.Addins;
using MonoDevelop.Components;
using MonoDevelop.Core;
@@ -137,11 +138,11 @@ namespace MonoDevelop.Ide.Templates return null;
}
- public ProcessedTemplateResult ProcessTemplate (SolutionTemplate template, NewProjectConfiguration config, SolutionFolder parentFolder)
+ public async Task<ProcessedTemplateResult> ProcessTemplate (SolutionTemplate template, NewProjectConfiguration config, SolutionFolder parentFolder)
{
IProjectTemplatingProvider provider = GetTemplatingProviderForTemplate (template);
if (provider != null) {
- var result = provider.ProcessTemplate (template, config, parentFolder);
+ var result = await provider.ProcessTemplate (template, config, parentFolder);
if (result.WorkspaceItems.Any ())
RecentTemplates.AddTemplate (template);
return result;
diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.csproj b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.csproj index 579223e10c..21a312a52b 100644 --- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.csproj +++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.csproj @@ -144,10 +144,6 @@ <HintPath>..\..\..\packages\SharpZipLib.0.86.0\lib\20\ICSharpCode.SharpZipLib.dll</HintPath> <Private>False</Private> </Reference> - <Reference Include="Newtonsoft.Json"> - <HintPath>..\..\..\packages\Newtonsoft.Json.8.0.3\lib\net45\Newtonsoft.Json.dll</HintPath> - <Private>False</Private> - </Reference> <Reference Include="System.Collections.Immutable"> <HintPath>..\..\..\build\bin\System.Collections.Immutable.dll</HintPath> </Reference> @@ -172,6 +168,29 @@ <Reference Include="YamlDotNet"> <HintPath>..\..\..\packages\YamlDotNet.Signed.4.0.1-pre291\lib\net35\YamlDotNet.dll</HintPath> </Reference> + <Reference Include="Microsoft.TemplateEngine.Abstractions"> + <HintPath>..\..\..\packages\Microsoft.TemplateEngine.Abstractions.1.0.0-beta1-20170208-116\lib\net45\Microsoft.TemplateEngine.Abstractions.dll</HintPath> + </Reference> + <Reference Include="Microsoft.TemplateEngine.Core.Contracts"> + <HintPath>..\..\..\packages\Microsoft.TemplateEngine.Core.Contracts.1.0.0-beta1-20170208-116\lib\net45\Microsoft.TemplateEngine.Core.Contracts.dll</HintPath> + </Reference> + <Reference Include="Microsoft.TemplateEngine.Utils"> + <HintPath>..\..\..\packages\Microsoft.TemplateEngine.Utils.1.0.0-beta1-20170208-116\lib\net45\Microsoft.TemplateEngine.Utils.dll</HintPath> + </Reference> + <Reference Include="Microsoft.TemplateEngine.Core"> + <HintPath>..\..\..\packages\Microsoft.TemplateEngine.Core.1.0.0-beta1-20170208-116\lib\net45\Microsoft.TemplateEngine.Core.dll</HintPath> + </Reference> + <Reference Include="Newtonsoft.Json"> + <HintPath>..\..\..\packages\Newtonsoft.Json.9.0.1\lib\net45\Newtonsoft.Json.dll</HintPath> + <Private>False</Private> + </Reference> + <Reference Include="System.IO.Compression" /> + <Reference Include="Microsoft.TemplateEngine.Edge"> + <HintPath>..\..\..\packages\Microsoft.TemplateEngine.Edge.1.0.0-beta1-20170208-116\lib\net45\Microsoft.TemplateEngine.Edge.dll</HintPath> + </Reference> + <Reference Include="Microsoft.TemplateEngine.Orchestrator.RunnableProjects"> + <HintPath>..\..\..\packages\Microsoft.TemplateEngine.Orchestrator.RunnableProjects.1.0.0-beta1-20170208-116\lib\net45\Microsoft.TemplateEngine.Orchestrator.RunnableProjects.dll</HintPath> + </Reference> </ItemGroup> <ItemGroup> <ProjectReference Include="..\MonoDevelop.Core\MonoDevelop.Core.csproj"> @@ -9226,6 +9245,10 @@ <Compile Include="MonoDevelop.Ide.Editor.Extension\HighlightUrlExtension.cs" /> <Compile Include="MonoDevelop.Ide.CodeCompletion\CompletionTriggerInfo.cs" /> <Compile Include="MonoDevelop.Ide.CodeCompletion\CompletionTriggerReason.cs" /> + <Compile Include="MonoDevelop.Ide.Templates\MicrosoftTemplateEngineProjectTemplatingProvider.cs" /> + <Compile Include="MonoDevelop.Ide.Templates\MicrosoftTemplateEngineSolutionTemplate.cs" /> + <Compile Include="MonoDevelop.Ide.Templates\MicrosoftTemplateEngineProcessedTemplateResult.cs" /> + <Compile Include="MonoDevelop.Ide.Codons\TemplateExtensionNode.cs" /> </ItemGroup> <ItemGroup> <None Include="Makefile.am" /> diff --git a/main/src/core/MonoDevelop.Ide/packages.config b/main/src/core/MonoDevelop.Ide/packages.config index 6ad8b4b162..c4e86756f4 100644 --- a/main/src/core/MonoDevelop.Ide/packages.config +++ b/main/src/core/MonoDevelop.Ide/packages.config @@ -1,6 +1,13 @@ <?xml version="1.0" encoding="utf-8"?> <packages> - <package id="Newtonsoft.Json" version="8.0.3" targetFramework="net45" /> + <package id="Microsoft.TemplateEngine.Abstractions" version="1.0.0-beta1-20170208-116" targetFramework="net45" /> + <package id="Microsoft.TemplateEngine.Core" version="1.0.0-beta1-20170208-116" targetFramework="net45" /> + <package id="Microsoft.TemplateEngine.Core.Contracts" version="1.0.0-beta1-20170208-116" targetFramework="net45" /> + <package id="Microsoft.TemplateEngine.Edge" version="1.0.0-beta1-20170208-116" targetFramework="net45" /> + <package id="Microsoft.TemplateEngine.Orchestrator.RunnableProjects" version="1.0.0-beta1-20170208-116" targetFramework="net45" /> + <package id="Microsoft.TemplateEngine.Utils" version="1.0.0-beta1-20170208-116" targetFramework="net45" /> + <package id="Newtonsoft.Json" version="9.0.1" targetFramework="net45" /> <package id="SharpZipLib" version="0.86.0" targetFramework="net45" /> + <package id="System.IO.Compression" version="4.3.0" targetFramework="net45" /> <package id="YamlDotNet.Signed" version="4.0.1-pre291" targetFramework="net45" /> </packages>
\ No newline at end of file |