We've been making a lot of improvements to our project template sine the initial version. Most recently we added some options for advanced client side development using webpack with bootstrap-sass. This new demo video provides a guided tour.
I am very happy to announce the availability of project templates that make it much easier to start new projects using cloudscribe components. Specifically, we have a new VSIX extension that provides a project template for Visual Studio 2017 and a NuGet package the provides a project template for the dotnet new command.
Previously, copying a project from the cloudscribe Starter Kits was the best way to get started with a new cloudscribe project, but now with the new project templates you can create projects with configurations that correspond to the different starter kit project configurations simply by using the available project template parameters. See the document "Introduction to cloudscribe" for more details.
Starting New Projects in Visual Studio
You can download the Visual Studio 2017 extension for free from the Visual Studio Marketplace, or from directly within Visual Studio, under Tools > Extensions and Updates > Online
If you download it from the marketplace you need to double click the .vsix file to install it. In both cases you have to restart Visual Studio for it to become available, then you will see a new cloudscribe project template under C# > Web in the new project dialog.
When you create a new cloudscribe project, another small dialog window will appear to let you choose which data storage platform and which cloudscribe features you want.
Starting New Projects with the .NET CLI (Command Line Interface)
The .NET CLI can be used on Windows, Linux, or macOS. You can install the cloudscribe project template NuGet package with this command:
dotnet new -i "cloudscribe.templates::*"
If you later wish to uninstall it, you can use this command:
dotnet new -u cloudscribe
Once you have the cloudscribe project template installed you should enter the following command to see the available parameters that you can pass to the template in order to choose which data storage platform to use and which features to install:
PS C:\_c\scratch> dotnet new cloudscribe --help Usage: new [options] Options: -h, --help Displays help for this command. -l, --list Lists templates containing the specified name. If no name is specified, lists all templates. -n, --name The name for the output being created. If no name is specified, the name of the current directory is used. -o, --output Location to place the generated output. -i, --install Installs a source or a template pack. -u, --uninstall Uninstalls a source or a template pack. --type Filters templates based on available types. Predefined values are "project", "item" or "other". --force Forces content to be generated even if it would change existing files. -lang, --language Specifies the language of the template to create. cloudscribe web project template (C#) Author: Joe Audette Options: -T|--Title The name of the project which determines the assembly product name. string - Optional Default: Project Title -S|--SimpleContent Include cloudscribe SimpleContent blog and content engine. bool - Optional Default: true -C|--ContactForm Include cloudscribe SimpleContactForm. bool - Optional Default: false -K|--KvpCustomRegistration Include cloudscribe key/value pair custom registration. bool - Optional Default: false -I|--IdentityServer Include IdentityServer4 (fork) integration. bool - Optional Default: false -L|--Logging Include cloudscribe logging and log viewer UI. bool - Optional Default: true -D|--DataStorage The data storage platform you wish to use. NoDb - A no-database file system storage MSSQL - Microsoft SqlServer storage using Entity Framework Core pgsql - PostgreSql storage using Entity Framework Core MySql - MySql storage using Entity Framework Core Default: MSSQL -H|--HttpsPort Port number to use to configure SSL in launchSettings.json. integer - Optional -Ke|--KestrelPort Port number to use to configure Kestrel in launchSettings.json. integer - Optional -II|--IISExpressPort Port number to use to configure IIS Express in launchSettings.json. integer - Optional PS C:\_c\scratch>
As you can see this is much easier than cloning the starter kits repo and copying an existing project. You have full control over the project name and even more configurable options than what the starter kits provide.
I hope you will give the new project templates a try and provide feedback. It would be great if you could provide a review or rating of the Visual Studio extension on the marketplace site.
One thing cool that I have noticed is that the marketplace shows the number of installs, not the number of downloads, so the number goes down if people uninstall it. That gives us a real honest metric for how the extension is doing in terms of popularity over time. The NuGet package for dotnet new shows download statistics. Note that the Visual Studio extension has the template embedded inside the vsix file so it doesn't affect the downloads from nuget, only installations from the CLI affect the nuget download numbers.
Feedback on the project templates has been great and I have continued to improve it. Yesterday I released a new version (1.8) with even more configurable options for SimpleContent and also added an option to set the multi-tenant mode to either use folders, host names or just use a single tenant.
Looking forward to talking about how to jump start your asp.net core web projects using cloudscribe tomorrow evening, August 9, 2017, at the Triangle .NET User Group Meeting.
I am even bringing along some cloudscribe swag to give away! Hope to see you there!
Huge thanks to Carl Franklin and Richard Campbell for having me on the DotNetRocks podcast to talk about cloudscribe!
In this post we will look at how using cloudscribe components helped deliver a high quality web project within a modest budget and allowed most effort to be focused on the primary project specific features we needed to develop.
I had the good fortune to collaborate as a sub contractor with exegesis Spatial Data Management on this delightful project, for their client, Royal Commission on the Ancient and Historical Monuments of Wales (RCAHMW).
Main Project Goals
The main goal of the project was to provide an accessible and responsive web interface onto a new database of historic place names in Wales, including Google-like searching and interactive maps. At the time of this writing the main features are complete but the dataset of around 400,000 place-names is still being improved and added to, working towards a public launch on May 8, 2017. As a project for the Welsh Government, another high priority was that all public facing features and content in the site should be available in both English and Welsh languages. Actually, while it is conceptually one site there are 2 domains that correspond to the English version, and the Welsh version, with a language switcher at the top of each site designed to link to the corresponding page in the other site. This was implemented as a single web application with 2 tenant sites using the multi-tenancy feature of cloudscribe Core. This was ideal since both sites have the exact same features and use the same codebase, while each tenant is configured with the corresponding language and localization.
Secondary Project Goals
As with most website projects, there are some standard features that most projects need such as a few marketing and informative pages, a contact form, a blog, social sharing, etc. Most of these needs were met with free open source cloudscribe components, for social sharing we used AddThis, and for comments we used Disqus. I should note that as the primary developer of the cloudscribe components, I was able to use the lessons learned and feedback from the team on the Place Names of Wales project to make these components even better.
Specific cloudscribe Components used in this project
- cloudscribe.Core - for user accounts and role management
- cloudscribe.SimpleContent - for pages and blog posts that are easy to edit right in the web browser
- cloudscribe.SimpleContactForm - for you guessed it, a contact form
- cloudscribe.Web.Localization - for easier localization and customization of labels, buttons, instructions, etc
- cloudscribe.Web.Navigation - for menus and breadcrumbs
- cloudscribe.Web.Pagination - for generating links for paged data
- cloudscribe.Logging - for capturing and browsing log events
- cloudscribe.DbHelpers - was used for easier data access against our back end stored procedures for the search and mapping data
That is a lot of ready to use functionality that you would not want to have to build from scratch for every project, and you don't have to.
The project team at exegesis found that working with the cloudscribe components was straightforward and logical and helped them learn the new ASP.NET Core technology along the way, while the site administrators at RCAHMW found the creation and editing of content simple and intuitive.
We started the project using one of the cloudscribe StarterKits, which are basically reference applications that provide examples of how to wire up the cloudscribe components in various configurations. Then we developed custom code for the primary features and language switching, and the visual design to meet the needs of the client.
The language switching was an interesting chellenge since there are 2 separate sites even though they are running from the same installation. Our first implementation automated it for blog posts by using the date and sequence of the post to match the corresponding post in the other site, so as long as posts were added on the same date and sequence in both sites, we could find the corresponding post in the other site to link to. We had some mapping for the pages from configuration which was ok given that the project only envisioned a small number of pages. Then after further consideration and thinking that the language switching might be a common challenge also in future projects, we pondered how to make it better and I pondered how to better support it in cloudscribe SimpleContent. As a result of that process, I added a new "correlation key" field for pages and blog posts. The idea is that though pages and posts in each site will have different titles and urls corresponding to the given language, a correlation key could be used to relate the content from each site and the correspondiing page or post could be looked up using the correlation key. The new solution does require that the correlation key is populated in order to be able to find the content in the other site, but is a more reliable way to tie the content together.
In summary, by using the cloudscribe components we were able to focus most of the effort towards the primary custom features required by the client. The end result is a high quality web application running on a modern technology stack, delivered on a modest budget. The client is happy and the team enjoyed the project.