If a NuGet package is not found when installing it via the Package Management Console or
when a project template tries to install the package an exception is thrown indicating the
actual problem instead of a null reference exception being thrown.
VsSolution returns an E_FAIL COM error if the project cannot be found.
If the project was in a subfolder inside the solution then VsSolution was failing to find the project
using its unique name (e.g. 'MyProject\MyProject.csproj').
Change EnvDTE.ProjectItems.AddFileFromCopy to add .resx and .Designer.cs files to the
project with DependentUpon set to the parent file if a parent file is found in the project.
Fixes 'No migrations configuration type was found in the assembly' error when enabling migrations.
EntityFramework's Enable-Migrations cmdlet builds the project and then checks the generated
assembly for the configurations class that it added.
Enable-Migrations now works.
Workaround is to have the DTE class implement the System.IServiceProvider interface which is not
actually implemented by Visual Studio's EnvDTE.DTE class.
NuGet's IProjectSystem.IsSupportedFile now returns false for web.config files when the project is not a web project.
It returns false for app.config files when the project is a web project.
Extend the text templating addin to allow addins to define their own service providers.
Package management addin defines a service provider that can be used in a T4 template to create EnvDTE types such as DTE.
Move EnvDTE API to separate assembly.
Create EnvDTE interfaces in VB.NET to allow COM parameterised properties to be implemented to match Visual Studio's API.
Rename EnvDTE namespace from ICSharpCode.PackageManagement.EnvDTE to EnvDTE
Files added (e.g. T4MVC.tt) when installing a NuGet package were not getting a default CustomTool configured.
Now the CustomToolsService.GetCompatibleCustomToolNames() is used to find the first matching custom tool name for a file.
The EnvDTE.CodeFunction.CanOverride property setter can be used to add a virtual keyword to the method definition.
The T4MVC template makes all controller methods virtual so it can override them in another generated class.
The EnvDTE.CodeClass2.ClassKind property setter can be used to add a partial keyword to the class definition.
The T4MVC template makes all controller classes partial so it can add extend the original class with an associated partial controller class that it generates.
The T4MVC template uses EnvDTE.ProjectItems.AddFromFile() to add its generated files as dependent files.
If the project items belong to a file then the DependentUpon property is set in the MSBuild project.
Throw exception when unknown item requested from EnvDTE.ProjectItems.Item() instead of returning null.
The T4MVC template relies on this behaviour when looking for folders that do not exist.
Convert project items generated by yield return to a list before allowing them to be used in a different app domain. The class generated by using the yield keyword is not serialisable.