Visual Studio 2015 introduced a new type of project template – Shared Project. In one of our previous post, we have seen a Shared Project can be used across multiple applications in Visual Studio, such as with Windows Phone apps , Windows Store apps , Desktop applications, Console applications, or even using Windows Universal applications. This is a great way of sharing code across single Cross Platform applications. So, What is the different between the Shared Project and a Class Library ? They looks like exactly same – “Isn’t just Shared project a class library? What differs?” – I have received the same question in my previous post . This post will give you an high level view on the difference between Shared Project and Class Library, how they being used, how they are differ with respect to development.
To understand it better way, lets consider below example, where we have one Console Application (ConsoleApplication1), which having Reference of one Class Library (ClassLibary1) and another is a Shared Project(SharedProject1)
Now, in a very first looks, the way SharedProject1 and ClassLibray1 Referred are different. The Class Library, referred like an Assembly (dll) where as Shared Project Referred as Reference Project which can be imported later.
When, Shared Project Compiled, there is no binary / dlls that needs to be referred. Though it is referred to the solution, it is considered as single project items that can be imported later. The Class Library, complied to a dll and that referred with the project.
Let’s have a take a deep look on how they referred in the project. Open the ConsoleApplication1.csproj files in edit mode and you will find following entries:
Project Reference for Class Library
Project Reference for a Shared Project
This clearly say, reference and access of these items are difference. Now, take another level of look. Open the ConsoleApplication1.exe in IL DASM Tool and review the reference as shown in below picture.
Console Application has
- MANIFEST
- Application Entity (ConsoleApplication1)
- And the Shared Project as its own contain )
If you open the MANIFEST file, you would be able to see, ClassLibrary1 referred as an external assembly.
This actually gives you a clear idea on reference of Class Library and Shared Project.
In the other hands, with respect to the application development
- Supported file types for a Shared Project includes C#, HTML, XAML, JavaScript, Images, Resource etc. This gives lot of advantage when you are building one Desktop Application using WPF, and a Windows Universal App that uses Shared Project to share the common XAML, Styles, etc.
- If you want to write platform specific code ( for Windows Phone , for Windows Store app ) you can use different processor predictive within the shared project.
Hope this Helps
Nice article on showing the differences ,if I understood your 2 articles correctly, it seems Shared Project works best with universal apps and those who write platform-specific code, I’m not sure how Shared Project would do any good to web sites let’s say web forms,if I have to modify something on Shared project,I have to do a full publish of my webforms website since Shared project won’t build an assembly (dll),in my opinion this is not good,class library on the other hand is useful in this scenario,just make your change,build your project ,then overwrite the assembly dll in your website with the updated one then your website is good to go