Skip to content
This repository was archived by the owner on Jan 12, 2024. It is now read-only.

Commit f847cf4

Browse files
adalonkzu
authored andcommitted
Added/fixed support for dev15
In order to support <ProjectReference> in the project file, we had to implement and provide the implementations for VSLangProject15 (VSProject4 and friends) Also fixing the CPS capabilities and adding missing rules And duplicating the NuGet project template for CS until we can fix the usage of dteSolution2.GetProjectTemplate ("Package", "NuGet")
1 parent a722bf2 commit f847cf4

38 files changed

Lines changed: 1269 additions & 206 deletions

packages.config

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,5 @@
55
<package id="xunit.runner.msbuild" version="2.1.0" />
66
<package id="OpenCover" version="4.6.519" targetFramework="net45" />
77
<package id="ReportGenerator" version="2.4.5" targetFramework="net45" />
8+
<package id="VSLangProj150" version="1.0.0" targetFramework="net46" />
89
</packages>

src/NuGet.Build.Packaging.Shared.targets

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
<?xml version="1.0" encoding="utf-8"?>
22
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
3+
<Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), NuGet.Restore.targets))\NuGet.Restore.targets"
4+
Condition=" '$(NuGetRestoreImported)' != 'true' " />
5+
36
<Import Project="NuGet.Build.Packaging.props" Condition=" '$(NuGetPackagingPropsImported)' != 'true' " />
47

58
<PropertyGroup Condition=" '$(Language)' == 'C#' ">

src/NuGet.Config

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
<add key="NuGet.org" value="https://api.nuget.org/v3/index.json" />
77
<add key="Merq-CI" value="https://ci.appveyor.com/nuget/merq" />
88
<add key="Clide-CI" value="https://ci.appveyor.com/nuget/clide" />
9+
<add key="NuGetVolatile" value="https://dotnet.myget.org/F/nuget-volatile/api/v3/index.json" />
910
</packageSources>
1011
<disabledPackageSources>
1112
<clear />

src/NuGet.Restore.targets

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
<Args>-verbosity quiet</Args>
2424
</RestoreSolution>
2525
</ItemDefinitionGroup>
26-
<Target Name="RestorePackages" BeforeTargets="Build" DependsOnTargets="DownloadNuGet;EnsureBeforeSolutionImport;RestoreSolutions" Condition=" '$(RestorePackages)' != 'false' " />
26+
<Target Name="RestorePackages" BeforeTargets="Build" DependsOnTargets="DownloadNuGet;RestoreSolutions" Condition=" '$(RestorePackages)' != 'false' " />
2727
<Target Name="EnsureBeforeSolutionImport">
2828
<Error Text="This targets file should ONLY be imported from a file named Before.$(SolutionFileName).targets alongside the solution file." Condition="!$(MSBuildProjectFile.Contains('$(SolutionFileName)'))" />
2929
</Target>
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
using System;
2+
using System.Collections;
3+
using System.Collections.Generic;
4+
using System.Linq;
5+
using System.Text;
6+
using System.Threading.Tasks;
7+
using EnvDTE;
8+
using VSLangProj;
9+
using VSLangProj140;
10+
11+
namespace NuGet.Packaging.VisualStudio
12+
{
13+
class AnalyzerReferencesService : AnalyzerReferences
14+
{
15+
Lazy<VSProject> project;
16+
17+
public AnalyzerReferencesService(Lazy<VSProject> project)
18+
{
19+
this.project = project;
20+
}
21+
22+
public void Add(string bstrPath)
23+
{
24+
}
25+
26+
public void Remove(string bstrPath)
27+
{
28+
}
29+
30+
public string Item(object index)
31+
{
32+
return null;
33+
}
34+
35+
public IEnumerator GetEnumerator()
36+
{
37+
yield break;
38+
}
39+
40+
public DTE DTE => project.Value.DTE;
41+
42+
public dynamic Parent => project.Value;
43+
44+
public Project ContainingProject => project.Value.Project;
45+
46+
public int Count => 0;
47+
}
48+
}
Lines changed: 47 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -1,52 +1,51 @@
11
<?xml version="1.0" encoding="utf-8"?>
22
<CommandTable xmlns="http://schemas.microsoft.com/VisualStudio/2005-10-18/CommandTable" xmlns:xs="http://www.w3.org/2001/XMLSchema">
3-
<Extern href="stdidcmd.h" />
4-
<Extern href="vsshlids.h" />
5-
6-
<Commands package="guidPackage">
7-
<Buttons>
8-
<Button guid="guidCommandSet" id="cmdidCreateNugetPackage" priority="0x0100" type="Button">
9-
<CommandFlag>DynamicVisibility</CommandFlag>
10-
<Strings>
11-
<ButtonText>Create NuGet Package...</ButtonText>
12-
</Strings>
13-
</Button>
14-
15-
<Button guid="guidCommandSet" id="cmdidAddPlatformImplementation" priority="0x0100" type="Button">
16-
<CommandFlag>DynamicVisibility</CommandFlag>
17-
<Strings>
18-
<ButtonText>Add Platform Implementation...</ButtonText>
19-
</Strings>
20-
</Button>
21-
</Buttons>
22-
</Commands>
23-
24-
<CommandPlacements>
25-
<CommandPlacement guid="guidCommandSet" id="cmdidCreateNugetPackage" priority="0xF000">
26-
<Parent guid="guidSHLMainMenu" id="IDG_VS_CTXT_PROJECT_BUILD" />
27-
</CommandPlacement>
28-
<CommandPlacement guid="guidCommandSet" id="cmdidAddPlatformImplementation" priority="0xF000">
29-
<Parent guid="guidSHLMainMenu" id="IDG_VS_CTXT_PROJECT_ADD" />
30-
</CommandPlacement>
31-
</CommandPlacements>
32-
33-
<VisibilityConstraints>
34-
<VisibilityItem guid="guidCommandSet" id="cmdidCreateNugetPackage" context="guidCreateNugetPackageUIContext" />
35-
<VisibilityItem guid="guidCommandSet" id="cmdidAddPlatformImplementation" context="guidAddPlatformImplementationUIContext" />
36-
</VisibilityConstraints>
37-
38-
<Symbols>
39-
<!-- This is the package guid. -->
40-
<GuidSymbol name="guidPackage" value="{e57e2daf-a455-45db-962e-31b1c9c70860}" />
41-
42-
<!-- This is the guid used to group the menu commands together -->
43-
<GuidSymbol name="guidCommandSet" value="{589286D3-5755-4E34-A8E4-0A7B670AF60A}">
44-
<IDSymbol name="cmdidCreateNugetPackage" value="0x0100" />
45-
<IDSymbol name="cmdidAddPlatformImplementation" value="0x0101" />
46-
</GuidSymbol>
47-
48-
<GuidSymbol name="guidCreateNugetPackageUIContext" value="{08E11CF6-52EE-4880-AB1B-D3CC7B10A895}" />
49-
<GuidSymbol name="guidAddPlatformImplementationUIContext" value="{2590DF87-84EB-487A-A1FF-160BEAF4F9CA}" />
50-
</Symbols>
3+
<Extern href="stdidcmd.h" />
4+
<Extern href="vsshlids.h" />
5+
6+
<Commands package="guidPackage">
7+
<Buttons>
8+
<Button guid="guidCommandSet" id="cmdidCreateNugetPackage" priority="0x0100" type="Button">
9+
<CommandFlag>DynamicVisibility</CommandFlag>
10+
<Strings>
11+
<ButtonText>Create NuGet Package...</ButtonText>
12+
</Strings>
13+
</Button>
14+
15+
<Button guid="guidCommandSet" id="cmdidAddPlatformImplementation" priority="0x0100" type="Button">
16+
<CommandFlag>DynamicVisibility</CommandFlag>
17+
<Strings>
18+
<ButtonText>Add Platform Implementation...</ButtonText>
19+
</Strings>
20+
</Button>
21+
</Buttons>
22+
</Commands>
23+
24+
<CommandPlacements>
25+
<CommandPlacement guid="guidCommandSet" id="cmdidCreateNugetPackage" priority="0xF000">
26+
<Parent guid="guidSHLMainMenu" id="IDG_VS_CTXT_PROJECT_BUILD" />
27+
</CommandPlacement>
28+
<CommandPlacement guid="guidCommandSet" id="cmdidAddPlatformImplementation" priority="0xF000">
29+
<Parent guid="guidSHLMainMenu" id="IDG_VS_CTXT_PROJECT_ADD" />
30+
</CommandPlacement>
31+
</CommandPlacements>
32+
33+
<VisibilityConstraints>
34+
<VisibilityItem guid="guidCommandSet" id="cmdidCreateNugetPackage" context="UICONTEXT_SolutionExistsAndNotBuildingAndNotDebugging" />
35+
<VisibilityItem guid="guidCommandSet" id="cmdidAddPlatformImplementation" context="guidAddPlatformImplementationUIContext" />
36+
</VisibilityConstraints>
37+
38+
<Symbols>
39+
<!-- This is the package guid. -->
40+
<GuidSymbol name="guidPackage" value="{e57e2daf-a455-45db-962e-31b1c9c70860}" />
41+
42+
<!-- This is the guid used to group the menu commands together -->
43+
<GuidSymbol name="guidCommandSet" value="{589286D3-5755-4E34-A8E4-0A7B670AF60A}">
44+
<IDSymbol name="cmdidCreateNugetPackage" value="0x0100" />
45+
<IDSymbol name="cmdidAddPlatformImplementation" value="0x0101" />
46+
</GuidSymbol>
47+
48+
<GuidSymbol name="guidAddPlatformImplementationUIContext" value="{2590DF87-84EB-487A-A1FF-160BEAF4F9CA}" />
49+
</Symbols>
5150

5251
</CommandTable>
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Linq;
4+
using System.Text;
5+
using System.Threading.Tasks;
6+
7+
namespace NuGet.Packaging.VisualStudio
8+
{
9+
class Contracts
10+
{
11+
public const string ProjectSystem_VSProject = "Microsoft.VisualStudio.ProjectSystem.VSLangProject.VSProject";
12+
}
13+
}

src/VisualStudio/NuGet.Packaging.VisualStudio.15/NuGet.Packaging.VisualStudio.15.csproj

Lines changed: 26 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
<TargetFrameworkVersion>v4.6</TargetFrameworkVersion>
1515
<TargetVsixContainerName>NuGetizer3000-VS2017.vsix</TargetVsixContainerName>
1616
<IncludeDebugSymbolsInVSIXContainer>true</IncludeDebugSymbolsInVSIXContainer>
17-
<DeployExtension Condition="'$(DeployExtension)' == '' And '$(Configuration)' == 'Release'">false</DeployExtension>
17+
<DeployExtension Condition="'$(DeployExtension)' == '' And '$(Configuration)' == 'Release'">false</DeployExtension>
1818
</PropertyGroup>
1919
<ItemGroup>
2020
<Reference Include="Microsoft.CSharp" />
@@ -32,12 +32,31 @@
3232
<Reference Include="System.Xaml" />
3333
<Reference Include="System.Xml" />
3434
<Reference Include="System.Xml.Linq" />
35+
<Reference Include="VSLangProj110, Version=11.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
36+
<EmbedInteropTypes>True</EmbedInteropTypes>
37+
</Reference>
38+
<Reference Include="VSLangProj140, Version=14.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
39+
<EmbedInteropTypes>True</EmbedInteropTypes>
40+
</Reference>
41+
<Reference Include="VSLangProj80, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
42+
<EmbedInteropTypes>True</EmbedInteropTypes>
43+
</Reference>
3544
<Reference Include="WindowsBase" />
3645
</ItemGroup>
3746
<ItemGroup>
47+
<Compile Include="AnalyzerReferencesService.cs" />
48+
<Compile Include="Contracts.cs" />
49+
<Compile Include="NuGetVSProject.cs" />
50+
<Compile Include="PackageReferencesService.cs" />
51+
<Compile Include="ProjectEventsService.cs" />
3852
<Compile Include="ProjectSystem\GlobalPropertiesProvider.cs" />
3953
<Compile Include="Properties\AssemblyInfo.cs" />
54+
<Compile Include="ReferencesWrapper.cs" />
55+
<Compile Include="ReferenceWrapper.cs" />
56+
<Compile Include="TemplateWizard.cs" />
4057
<None Include="NuGet.Packaging.VisualStudio.15.targets" />
58+
<None Include="Templates\Projects\CSharp\Package-Workaround\Package.nuproj" />
59+
<None Include="Templates\Projects\CSharp\Package-Workaround\Package.targets" />
4160
<None Include="Templates\Projects\PortableClassLibrary\class1.cs" />
4261
<None Include="Templates\Projects\PortableClassLibrary\assemblyinfo.cs" />
4362
<Compile Include="ProjectSystem\ProjectProperties.cs" />
@@ -50,9 +69,7 @@
5069
<None Include="project.json" />
5170
<None Include="Templates\Projects\Nuget\Package\Package.nuproj" />
5271
<None Include="Templates\Projects\Nuget\Package\Package.targets" />
53-
<None Include="Templates\Projects\Nuget\Package\Project.json" />
5472
<None Include="Templates\Projects\PortableClassLibrary\PortableClassLibrary.targets" />
55-
<None Include="Templates\Projects\PortableClassLibrary\Project.json" />
5673
</ItemGroup>
5774
<ItemGroup>
5875
<None Include="app.config" />
@@ -65,10 +82,6 @@
6582
</VSCTCompile>
6683
</ItemGroup>
6784
<ItemGroup>
68-
<ProjectReference Include="..\..\Build\NuGet.Build.Packaging.Tasks\NuGet.Build.Packaging.Tasks.csproj">
69-
<Project>{a3d231d7-31e4-4a70-8cd1-7246c7d069f6}</Project>
70-
<Name>NuGet.Build.Packaging.Tasks</Name>
71-
</ProjectReference>
7285
<ProjectReference Include="..\NuGet.Packaging.VisualStudio\NuGet.Packaging.VisualStudio.csproj">
7386
<Project>{9617edcd-23bb-41ea-827d-f5729d45b0af}</Project>
7487
<Name>NuGet.Packaging.VisualStudio</Name>
@@ -97,6 +110,12 @@
97110
<ItemGroup>
98111
<None Include="Templates\Projects\PortableClassLibrary\PortableClassLibrary.csproj" />
99112
</ItemGroup>
113+
<ItemGroup>
114+
<None Include="Templates\Projects\CSharp\Package-Workaround\Package.vstemplate" />
115+
</ItemGroup>
116+
<ItemGroup>
117+
<Resource Include="Templates\Projects\CSharp\Package-Workaround\Readme.txt" />
118+
</ItemGroup>
100119
<Import Project="..\NuGet.Packaging.VisualStudio.Shared\NuGet.Packaging.VisualStudio.Shared.projitems" Label="Shared" />
101120
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
102121
<Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), NuGet.Packaging.VisualStudio.Shared.targets))\NuGet.Packaging.VisualStudio.Shared.targets" />
Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Linq;
4+
using EnvDTE;
5+
using VSLangProj;
6+
using System.Runtime.InteropServices;
7+
using System.ComponentModel.Composition;
8+
using Microsoft.VisualStudio.ProjectSystem;
9+
using VSLangProj150;
10+
using VSLangProj140;
11+
using VSLangProj80;
12+
using Merq;
13+
using NuGet.Protocol.Core.Types;
14+
15+
namespace NuGet.Packaging.VisualStudio
16+
{
17+
[Export(Contracts.ProjectSystem_VSProject, typeof(VSProject))]
18+
[AppliesTo(Constants.NuProjCapability)]
19+
[ComVisible(true)]
20+
[Order(1)] // This Project needs to be exported before the built-in (OAVSProject) provided by VS
21+
class NuGetVSProject : VSProject, VSProject4
22+
{
23+
readonly Lazy<VSProject> innerProject;
24+
readonly Lazy<PackageReferences> packageReferences;
25+
readonly Lazy<References> references;
26+
readonly Lazy<VSProjectEvents2> events2;
27+
readonly Lazy<AnalyzerReferences> analyzerReferences;
28+
29+
[ImportingConstructor]
30+
public NuGetVSProject(
31+
[ImportMany(Contracts.ProjectSystem_VSProject)] IEnumerable<Lazy<VSProject, IAppliesToMetadataView>> projects,
32+
Lazy<IProjectLockService> projectLockService,
33+
Lazy<IAsyncManager> asyncManager)
34+
{
35+
innerProject = new Lazy<VSProject>(() => projects
36+
.Where(x => x.Metadata.AppliesTo != Constants.NuProjCapability)
37+
.Select(x => x.Value)
38+
.FirstOrDefault());
39+
40+
packageReferences = new Lazy<PackageReferences>(() => new PackageReferencesService(this, projectLockService, asyncManager));
41+
references = new Lazy<References>(() => new ReferencesWrapper(innerProject, packageReferences));
42+
events2 = new Lazy<VSProjectEvents2>(() => new ProjectEventsService(innerProject));
43+
analyzerReferences = new Lazy<AnalyzerReferences>(() => new AnalyzerReferencesService(innerProject));
44+
}
45+
46+
VSProject InnerProject => innerProject.Value;
47+
48+
public BuildManager BuildManager => InnerProject.BuildManager;
49+
50+
public DTE DTE => InnerProject.DTE;
51+
52+
public VSProjectEvents Events => InnerProject.Events;
53+
54+
public Imports Imports => InnerProject.Imports;
55+
56+
public Project Project => InnerProject.Project;
57+
58+
public References References => references.Value;
59+
//public References References => InnerProject.References;
60+
61+
public string TemplatePath => InnerProject.TemplatePath;
62+
63+
public ProjectItem WebReferencesFolder => InnerProject.WebReferencesFolder;
64+
65+
public bool WorkOffline
66+
{
67+
get { return InnerProject.WorkOffline; }
68+
set { InnerProject.WorkOffline = value; }
69+
}
70+
71+
public PackageReferences PackageReferences => packageReferences.Value;
72+
73+
public dynamic PublishManager => null;
74+
75+
public VSProjectEvents2 Events2 => events2.Value;
76+
77+
public AnalyzerReferences AnalyzerReferences => analyzerReferences.Value;
78+
79+
public ProjectItem AddWebReference(string bstrUrl) => InnerProject.AddWebReference(bstrUrl);
80+
81+
public void CopyProject(string bstrDestFolder, string bstrDestUNCPath, prjCopyProjectOption copyProjectOption, string bstrUsername, string bstrPassword) =>
82+
InnerProject.CopyProject(bstrDestFolder, bstrDestUNCPath, copyProjectOption, bstrUsername, bstrPassword);
83+
84+
public ProjectItem CreateWebReferencesFolder() => InnerProject.CreateWebReferencesFolder();
85+
86+
public void Exec(prjExecCommand command, int bSuppressUI, object varIn, out object pVarOut) =>
87+
InnerProject.Exec(command, bSuppressUI, varIn, out pVarOut);
88+
89+
public void GenerateKeyPairFiles(string strPublicPrivateFile, string strPublicOnlyFile = "0") =>
90+
InnerProject.GenerateKeyPairFiles(strPublicPrivateFile, strPublicOnlyFile);
91+
92+
public string GetUniqueFilename(object pDispatch, string bstrRoot, string bstrDesiredExt) =>
93+
InnerProject.GetUniqueFilename(pDispatch, bstrRoot, bstrDesiredExt);
94+
95+
public void Refresh() => InnerProject.Refresh();
96+
}
97+
}

0 commit comments

Comments
 (0)