Remove Blazor VSIX

This is no longer shipped, because the templates installed by `dotnet
new -i` show up in VS now. Removing it now so we don't have to keep it
around in servicing forever.
This commit is contained in:
Ryan Nowak 2019-08-12 13:38:44 -07:00
parent a4ab9ffa05
commit 29cf7ecb80
16 changed files with 0 additions and 837 deletions

View File

@ -17,7 +17,6 @@
<!-- These projects use 'legacy' csproj, which is not supported by dotnet-msbuild. --> <!-- These projects use 'legacy' csproj, which is not supported by dotnet-msbuild. -->
<ProjectToExclude Include=" <ProjectToExclude Include="
$(RepoRoot)src\Components\Blazor\BlazorExtension\src\Microsoft.VisualStudio.BlazorExtension.csproj;
$(RepoRoot)src\Servers\HttpSys\samples\TestClient\TestClient.csproj; $(RepoRoot)src\Servers\HttpSys\samples\TestClient\TestClient.csproj;
$(RepoRoot)src\Middleware\WebSockets\samples\TestServer\WebSockets.TestServer.csproj; $(RepoRoot)src\Middleware\WebSockets\samples\TestServer\WebSockets.TestServer.csproj;
" "

View File

@ -1,56 +0,0 @@
// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System;
using System.Diagnostics;
using System.Reflection;
using Microsoft.VisualStudio.Shell;
namespace Microsoft.VisualStudio.BlazorExtension
{
public class AboutDialogInfoAttribute : RegistrationAttribute
{
private readonly string _detailsId;
private readonly string _name;
private readonly string _nameId;
private readonly string _packageGuid;
// nameId and detailsId are resource IDs, they should start with #
public AboutDialogInfoAttribute(string packageGuid, string name, string nameId, string detailsId)
{
_packageGuid = packageGuid;
_name = name;
_nameId = nameId;
_detailsId = detailsId;
}
private string GetKeyName()
{
return "InstalledProducts\\" + _name;
}
public override void Register(RegistrationContext context)
{
var version = typeof(AboutDialogInfoAttribute).Assembly.GetCustomAttribute<AssemblyInformationalVersionAttribute>()?.InformationalVersion;
using (var key = context.CreateKey(GetKeyName()))
{
key.SetValue(null, _nameId);
key.SetValue("Package", Guid.Parse(_packageGuid).ToString("B"));
key.SetValue("ProductDetails", _detailsId);
key.SetValue("UseInterface", false);
key.SetValue("UseVSProductID", false);
if (version != null)
{
key.SetValue("PID", version);
}
}
}
public override void Unregister(RegistrationContext context)
{
context.RemoveKey(GetKeyName());
}
}
}

View File

@ -1,147 +0,0 @@
// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using Microsoft.VisualStudio.Shell.Interop;
using System;
using System.Diagnostics;
using System.IO;
using System.IO.Pipes;
using System.Security.AccessControl;
using System.Security.Principal;
using System.Threading;
using System.Threading.Tasks;
using Package = Microsoft.VisualStudio.Shell.Package;
using ThreadHelper = Microsoft.VisualStudio.Shell.ThreadHelper;
namespace Microsoft.VisualStudio.BlazorExtension
{
/// <summary>
/// The counterpart to VSForWindowsRebuildService.cs in the Blazor.Server project.
/// Listens for named pipe connections and rebuilds projects on request.
/// </summary>
internal class AutoRebuildService
{
private const int _protocolVersion = 1;
private readonly BuildEventsWatcher _buildEventsWatcher;
private readonly string _pipeName;
public AutoRebuildService(BuildEventsWatcher buildEventsWatcher)
{
_buildEventsWatcher = buildEventsWatcher ?? throw new ArgumentNullException(nameof(buildEventsWatcher));
_pipeName = $"BlazorAutoRebuild\\{Process.GetCurrentProcess().Id}";
}
public void Listen()
{
_ = AddBuildServiceNamedPipeServerAsync();
}
private Task AddBuildServiceNamedPipeServerAsync()
{
return Task.Factory.StartNew(async () =>
{
try
{
var identity = WindowsIdentity.GetCurrent();
var identifier = identity.Owner;
var security = new PipeSecurity();
// Restrict access to just this account.
var rule = new PipeAccessRule(identifier, PipeAccessRights.ReadWrite | PipeAccessRights.CreateNewInstance, AccessControlType.Allow);
security.AddAccessRule(rule);
security.SetOwner(identifier);
// And our current elevation level
var principal = new WindowsPrincipal(identity);
var isServerElevated = principal.IsInRole(WindowsBuiltInRole.Administrator);
using (var serverPipe = new NamedPipeServerStream(
_pipeName,
PipeDirection.InOut,
NamedPipeServerStream.MaxAllowedServerInstances,
PipeTransmissionMode.Byte,
PipeOptions.Asynchronous | PipeOptions.WriteThrough,
0x10000, // 64k input buffer
0x10000, // 64k output buffer
security,
HandleInheritability.None))
{
// As soon as we receive a connection, spin up another background
// listener to wait for the next connection
await serverPipe.WaitForConnectionAsync();
_ = AddBuildServiceNamedPipeServerAsync();
await HandleRequestAsync(serverPipe, isServerElevated);
}
}
catch (Exception ex)
{
await AttemptLogErrorAsync(
$"Error in Blazor AutoRebuildService:\n{ex.Message}\n{ex.StackTrace}");
}
}, CancellationToken.None, TaskCreationOptions.LongRunning, TaskScheduler.Default);
}
private async Task HandleRequestAsync(NamedPipeServerStream stream, bool isServerElevated)
{
// Protocol:
// 1. Send a "protocol version" number to the client
// 2. Receive the project path from the client
// If it is the special string "abort", gracefully disconnect and end
// This is to allow for mismatches between server and client protocol version
// 3. Receive the "if not built since" timestamp from the client
// 4. Perform the build, then send back the success/failure result flag
// Keep in sync with VSForWindowsRebuildService.cs in the Blazor.Server project
// In the future we may extend this to getting back build error details
await stream.WriteIntAsync(_protocolVersion);
var projectPath = await stream.ReadStringAsync();
// We can't do the security check for elevation until we read from the stream.
if (isServerElevated != IsClientElevated(stream))
{
return;
}
if (projectPath.Equals("abort", StringComparison.Ordinal))
{
return;
}
var allowExistingBuildsSince = await stream.ReadDateTimeAsync();
var buildResult = await _buildEventsWatcher.PerformBuildAsync(projectPath, allowExistingBuildsSince);
await stream.WriteBoolAsync(buildResult);
}
private async Task AttemptLogErrorAsync(string message)
{
if (!ThreadHelper.CheckAccess())
{
await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync();
}
var outputWindow = (IVsOutputWindow)Package.GetGlobalService(typeof(SVsOutputWindow));
if (outputWindow != null)
{
outputWindow.GetPane(VSConstants.OutputWindowPaneGuid.BuildOutputPane_guid, out var pane);
if (pane != null)
{
pane.OutputString(message);
pane.Activate();
}
}
}
private bool? IsClientElevated(NamedPipeServerStream stream)
{
bool? isClientElevated = null;
stream.RunAsClient(() =>
{
var identity = WindowsIdentity.GetCurrent(ifImpersonating: true);
var principal = new WindowsPrincipal(identity);
isClientElevated = principal.IsInRole(WindowsBuiltInRole.Administrator);
});
return isClientElevated;
}
}
}

View File

@ -1,184 +0,0 @@
// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using Microsoft.VisualStudio.Shell;
using Microsoft.VisualStudio.Shell.Interop;
namespace Microsoft.VisualStudio.BlazorExtension
{
/// <summary>
/// Watches for Blazor project build events, starts new builds, and tracks builds in progress.
/// </summary>
internal class BuildEventsWatcher : IVsUpdateSolutionEvents2
{
private const string BlazorProjectCapability = "Blazor";
private readonly IVsSolution _vsSolution;
private readonly IVsSolutionBuildManager _vsBuildManager;
private readonly object mostRecentBuildInfosLock = new object();
private readonly Dictionary<string, BuildInfo> mostRecentBuildInfos
= new Dictionary<string, BuildInfo>(StringComparer.OrdinalIgnoreCase);
public BuildEventsWatcher(IVsSolution vsSolution, IVsSolutionBuildManager vsBuildManager)
{
_vsSolution = vsSolution ?? throw new ArgumentNullException(nameof(vsSolution));
_vsBuildManager = vsBuildManager ?? throw new ArgumentNullException(nameof(vsBuildManager));
}
public Task<bool> PerformBuildAsync(string projectPath, DateTime allowExistingBuildsSince)
{
BuildInfo newBuildInfo;
lock (mostRecentBuildInfosLock)
{
if (mostRecentBuildInfos.TryGetValue(projectPath, out var existingInfo))
{
// If there's a build in progress, we'll join that even if it was started
// before allowExistingBuildsSince, because it's too messy to cancel
// in-progress builds. On rare occasions if the user is editing files while
// a build is in progress they *might* see a not-latest build when they
// reload, but then they just have to reload again.
var acceptBuild = !existingInfo.TaskCompletionSource.Task.IsCompleted
|| existingInfo.StartTime > allowExistingBuildsSince;
if (acceptBuild)
{
return existingInfo.TaskCompletionSource.Task;
}
}
// We're going to start a new build now. Track the BuildInfo for it even
// before it starts so other incoming build requests can join it.
mostRecentBuildInfos[projectPath] = newBuildInfo = new BuildInfo();
}
return PerformNewBuildAsync(projectPath, newBuildInfo);
}
public int UpdateSolution_Begin(ref int pfCancelUpdate)
=> VSConstants.S_OK;
public int UpdateSolution_Done(int fSucceeded, int fModified, int fCancelCommand)
=> VSConstants.S_OK;
public int UpdateSolution_StartUpdate(ref int pfCancelUpdate)
=> VSConstants.S_OK;
public int UpdateSolution_Cancel()
=> VSConstants.S_OK;
public int OnActiveProjectCfgChange(IVsHierarchy pIVsHierarchy)
=> VSConstants.S_OK;
public int UpdateProjectCfg_Begin(IVsHierarchy pHierProj, IVsCfg pCfgProj, IVsCfg pCfgSln, uint dwAction, ref int pfCancel)
{
ThreadHelper.ThrowIfNotOnUIThread();
if (IsBlazorProject(pHierProj))
{
// This method runs both for manually-invoked builds and for builds triggered automatically
// by PerformNewBuildAsync(). In the case where it's a manually-invoked build, make sure
// there's an in-progress BuildInfo so that if there are further builds requests while the
// build is still in progress we can join them onto this existing build.
var projectPath = GetProjectPath(pHierProj);
lock (mostRecentBuildInfosLock)
{
var hasBuildInProgress =
mostRecentBuildInfos.TryGetValue(projectPath, out var existingInfo)
&& !existingInfo.TaskCompletionSource.Task.IsCompleted;
if (!hasBuildInProgress)
{
mostRecentBuildInfos[projectPath] = new BuildInfo();
}
}
}
return VSConstants.S_OK;
}
public int UpdateProjectCfg_Done(IVsHierarchy pHierProj, IVsCfg pCfgProj, IVsCfg pCfgSln, uint dwAction, int fSuccess, int fCancel)
{
ThreadHelper.ThrowIfNotOnUIThread();
if (IsBlazorProject(pHierProj))
{
var buildResult = fSuccess == 1;
var projectPath = GetProjectPath(pHierProj);
// Mark pending build info as completed
BuildInfo foundInfo = null;
lock (mostRecentBuildInfosLock)
{
mostRecentBuildInfos.TryGetValue(projectPath, out foundInfo);
}
if (foundInfo != null)
{
foundInfo.TaskCompletionSource.TrySetResult(buildResult);
}
}
return VSConstants.S_OK;
}
private async Task<bool> PerformNewBuildAsync(string projectPath, BuildInfo buildInfo)
{
// Switch to the UI thread and request the build
var didStartBuild = await ThreadHelper.JoinableTaskFactory.RunAsync(async delegate
{
await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync();
var hr = _vsSolution.GetProjectOfUniqueName(projectPath, out var hierarchy);
if (hr != VSConstants.S_OK)
{
return false;
}
hr = _vsBuildManager.StartSimpleUpdateProjectConfiguration(
hierarchy,
/* not used */ null,
/* not used */ null,
(uint)VSSOLNBUILDUPDATEFLAGS.SBF_OPERATION_BUILD,
/* other flags */ 0,
/* suppress dialogs */ 1);
if (hr != VSConstants.S_OK)
{
return false;
}
return true;
});
if (!didStartBuild)
{
// Since the build didn't start, make sure nobody's waiting for it
buildInfo.TaskCompletionSource.TrySetResult(false);
}
return await buildInfo.TaskCompletionSource.Task;
}
private static bool IsBlazorProject(IVsHierarchy pHierProj)
=> pHierProj.IsCapabilityMatch(BlazorProjectCapability);
private static string GetProjectPath(IVsHierarchy pHierProj)
{
ThreadHelper.ThrowIfNotOnUIThread();
ErrorHandler.ThrowOnFailure(((IVsProject)pHierProj).GetMkDocument((uint)VSConstants.VSITEMID.Root, out var projectPath), VSConstants.E_NOTIMPL);
return projectPath;
}
class BuildInfo
{
public DateTime StartTime { get; }
public TaskCompletionSource<bool> TaskCompletionSource { get; }
public BuildInfo()
{
StartTime = DateTime.Now;
TaskCompletionSource = new TaskCompletionSource<bool>();
}
}
}
}

View File

@ -1,49 +0,0 @@
// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System;
using System.IO;
using System.Text;
using System.Threading.Tasks;
namespace Microsoft.VisualStudio.BlazorExtension
{
internal static class StreamProtocolExtensions
{
public static async Task<string> ReadStringAsync(this Stream stream)
{
var length = BitConverter.ToInt32(await ReadBytesAsync(stream, 4), 0);
var utf8Bytes = await ReadBytesAsync(stream, length);
return Encoding.UTF8.GetString(utf8Bytes);
}
public static async Task<DateTime> ReadDateTimeAsync(this Stream stream)
{
var ticksBytes = await ReadBytesAsync(stream, 8);
var ticks = BitConverter.ToInt64(ticksBytes, 0);
return new DateTime(ticks);
}
public static async Task WriteBoolAsync(this Stream stream, bool value)
{
var byteVal = value ? (byte)1 : (byte)0;
await stream.WriteAsync(new[] { byteVal }, 0, 1);
}
public static async Task WriteIntAsync(this Stream stream, int value)
{
await stream.WriteAsync(BitConverter.GetBytes(value), 0, 4);
}
private static async Task<byte[]> ReadBytesAsync(Stream stream, int exactLength)
{
var buf = new byte[exactLength];
var bytesRead = 0;
while (bytesRead < exactLength)
{
bytesRead += await stream.ReadAsync(buf, bytesRead, exactLength - bytesRead);
}
return buf;
}
}
}

View File

@ -1,44 +0,0 @@
// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System;
using System.Runtime.InteropServices;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.VisualStudio.Shell;
using Microsoft.VisualStudio.Shell.Interop;
using Task = System.Threading.Tasks.Task;
namespace Microsoft.VisualStudio.BlazorExtension
{
// We mainly have a package so we can have an "About" dialog entry.
[PackageRegistration(UseManagedResourcesOnly = true, AllowsBackgroundLoading = true)]
[AboutDialogInfo(PackageGuidString, "ASP.NET Core Blazor Language Services", "#110", "112")]
[Guid(BlazorPackage.PackageGuidString)]
[ProvideAutoLoad(UIContextGuids80.SolutionExists, PackageAutoLoadFlags.BackgroundLoad)]
public sealed class BlazorPackage : AsyncPackage
{
public const string PackageGuidString = "d9fe04bc-57a7-4107-915e-3a5c2f9e19fb";
protected async override Task InitializeAsync(CancellationToken cancellationToken, IProgress<ServiceProgressData> progress)
{
await base.InitializeAsync(cancellationToken, progress);
await JoinableTaskFactory.SwitchToMainThreadAsync();
// Create build watcher. No need to unadvise, as this only happens once anyway.
var solution = (IVsSolution)await GetServiceAsync(typeof(IVsSolution));
var buildManager = (IVsSolutionBuildManager)await GetServiceAsync(typeof(SVsSolutionBuildManager));
// According to the docs, this can happen if VS shuts down while our package is loading.
if (solution == null || buildManager == null)
{
var buildWatcher = new BuildEventsWatcher(solution, buildManager);
var hr = buildManager.AdviseUpdateSolutionEvents(buildWatcher, out var cookie);
Marshal.ThrowExceptionForHR(hr);
new AutoRebuildService(buildWatcher).Listen();
}
}
}
}

View File

@ -1,2 +0,0 @@
[$RootKey$\Languages\CodeExpansions\CSharp\Paths]
"Blazor"="$PackageFolder$\CodeSnippets\Blazor"

View File

@ -1,31 +0,0 @@
<?xml version="1.0" encoding="utf-8" ?>
<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
<CodeSnippet Format="1.0.0">
<Header>
<Title>para</Title>
<Shortcut>para</Shortcut>
<Description>Code snippet for an automatically implemented parameter for Blazor</Description>
<Author>Microsoft</Author>
<SnippetTypes>
<SnippetType>Expansion</SnippetType>
</SnippetTypes>
</Header>
<Snippet>
<Declarations>
<Literal>
<ID>type</ID>
<ToolTip>Parameter type</ToolTip>
<Default>int</Default>
</Literal>
<Literal>
<ID>property</ID>
<ToolTip>Parameter name</ToolTip>
<Default>MyParameter</Default>
</Literal>
</Declarations>
<Code Language="csharp">
<![CDATA[[Parameter] protected $type$ $property$ { get; set; }$end$]]>
</Code>
</Snippet>
</CodeSnippet>
</CodeSnippets>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.9 KiB

View File

@ -1,148 +0,0 @@
<Project>
<Import Project="Sdk.props" Sdk="Microsoft.NET.Sdk" />
<PropertyGroup>
<TargetFramework>net472</TargetFramework>
<!-- Use the same experimental hive as Roslyn and Razor. This makes it easy to mix private builds. -->
<VSSDKTargetPlatformRegRootSuffix>RoslynDev</VSSDKTargetPlatformRegRootSuffix>
<!--
Mark the VSIX as a per-computer install (not-per-user). Putting a component "in the box"
requires this, and trying to change it after doing a release has lot of problems.
-->
<ExtensionInstallationRoot>CommonExtensions</ExtensionInstallationRoot>
<ExtensionInstallationFolder>Microsoft\Blazor</ExtensionInstallationFolder>
<!-- This should be set as true if we're ever building the VSIX for inclusion by the VS installer. -->
<IsProductComponent>false</IsProductComponent>
<!-- Update the VSToolsPath to ensure VSIX builds -->
<VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
<!-- Other projects should not reference this assembly. It is only meaning to be used in Visual Studio. -->
<IsProjectReferenceProvider>false</IsProjectReferenceProvider>
<IsPackable>false</IsPackable>
<UseCodebase>true</UseCodebase>
<GeneratePkgDefFile>true</GeneratePkgDefFile>
<DeployProjectOutput Condition="'$(ContinuousIntegrationBuild)' == 'true'">false</DeployProjectOutput>
<DisablePackageReferenceRestrictions>true</DisablePackageReferenceRestrictions>
<!-- The Resources.resx is a embedded resource -->
<GenerateResxSource>false</GenerateResxSource>
</PropertyGroup>
<!--
Since the VSSDK doeesn't support SDK-based projects, we have to use the long/verbose version.
This section has all of the things we need to customize to the VSIX correctly. Everything outside
this section is just standard "old-csproj" boilerplate.
BEGIN INTERESTING STUFF
-->
<PropertyGroup>
<!--
Include this assembly in the VSIX but not its symbols, except when installing it to the experimental
instance.
-->
<IncludeAssemblyInVSIXContainer>true</IncludeAssemblyInVSIXContainer>
<IncludeDebugSymbolsInVSIXContainer>false</IncludeDebugSymbolsInVSIXContainer>
<IncludeDebugSymbolsInLocalVSIXDeployment>true</IncludeDebugSymbolsInLocalVSIXDeployment>
<!--
Always include assemblies and symbols in the output directory.
-->
<CopyBuildOutputToOutputDirectory>true</CopyBuildOutputToOutputDirectory>
<CopyOutputSymbolsToOutputDirectory>true</CopyOutputSymbolsToOutputDirectory>
</PropertyGroup>
<Target Name="PreCreateVsixContainer" BeforeTargets="GetVsixSourceItems" Condition="'$(TargetOsName)' == 'win' AND '$(TargetArchitecture)' != 'arm'">
<ItemGroup>
<_TemplatePackage Include="$(ArtifactsShippingPackagesDir)Microsoft.AspNetCore.Blazor.Templates.*.nupkg" />
</ItemGroup>
<Error Text="No template files found." Condition="@(_TemplatePackage->Count()) == 0" />
<ItemGroup>
<VSIXSourceItem Include="@(_TemplatePackage)">
<VSIXSubPath>ProjectTemplates\</VSIXSubPath>
</VSIXSourceItem>
</ItemGroup>
</Target>
<!--
This is needed to support our infrastructure's automatic upload of symbols to the symbol server
for debugging.
The official build will set $(SymbolsPublishDir) and provide an additional place where the symbols
ought to be copied for publishing. This will noop otherwise.
-->
<Target Name="CopySymbolsToOutput" AfterTargets="Build" Condition="'$(SymbolsPublishDir)' != ''">
<Copy SourceFiles="$(OutDir)$(AssemblyName).pdb" DestinationFolder="$(SymbolsPublishDir)" />
</Target>
<ItemGroup>
<Content Include="CodeSnippets.pkgdef" CopyToOutputDirectory="PreserveNewest" IncludeInVSIX="true" />
<Content Include="Templates.pkgdef" CopyToOutputDirectory="PreserveNewest" IncludeInVSIX="true" />
<Content Include="CodeSnippets\Blazor\para.snippet" CopyToOutputDirectory="PreserveNewest" IncludeInVSIX="true" />
<Content Include="Content\WebConfiguration.png" CopyToOutputDirectory="PreserveNewest" IncludeInVSIX="true" />
<Content Include="Resources\BlazorPackage.ico" CopyToOutputDirectory="PreserveNewest" IncludeInVSIX="true" />
<Content Include="..\..\..\THIRD-PARTY-NOTICES.txt" CopyToOutputDirectory="PreserveNewest" IncludeInVSIX="true">
<Link>Content\THIRD-PARTY-NOTICES.txt</Link>
</Content>
<Content Include="$(RepoRoot)LICENSE.txt" CopyToOutputDirectory="PreserveNewest" IncludeInVSIX="true">
<Link>Content\LICENSE.txt</Link>
</Content>
<None Include="source.extension.vsixmanifest" SubType="Designer" />
</ItemGroup>
<ItemGroup>
<ProjectReference
Include="..\..\Templates\src\Microsoft.AspNetCore.Blazor.Templates.csproj"
ReferenceOutputAssembly="false"
Private="false"
Targets="Build;Pack" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.VisualStudio.Shell.15.0" Version="15.7.27703" />
<PackageReference Include="StreamJsonRpc" Version="1.5.43" />
</ItemGroup>
<!-- Resources are a little bit special in a VSIX -->
<PropertyGroup>
<EnableDefaultEmbeddedResourceItems>false</EnableDefaultEmbeddedResourceItems>
</PropertyGroup>
<ItemGroup>
<EmbeddedResource Include="Resources.resx">
<MergeWithCTO>true</MergeWithCTO>
<ManifestResourceName>VSPackage</ManifestResourceName>
</EmbeddedResource>
</ItemGroup>
<ItemGroup>
<Reference Include="PresentationCore" />
<Reference Include="PresentationFramework" />
<Reference Include="System" />
<Reference Include="System.Design" />
<Reference Include="System.Drawing" />
<Reference Include="System.Windows.Forms" />
</ItemGroup>
<Import Project="Sdk.targets" Sdk="Microsoft.NET.Sdk" />
<!-- These need to be set after Sdk.targets because $(VersionSuffixDateStamp) is empty before Sdk.targets is evaluated. -->
<PropertyGroup>
<!--
Following VS convention of using the VS release # as a convention for the vsix version.
VS needs this build number to be parsable by System.Version, so it can't have any letters or a - which
is used by our build system.
-->
<VsixVersion Condition="'$(VersionSuffixDateStamp)' != ''">16.0.$(VersionSuffixDateStamp).$(VersionSuffixBuildOfTheDay)</VsixVersion>
<!-- For local development, set this 42 so its always higher than officil builds. -->
<VsixVersion Condition="'$(VersionSuffixDateStamp)' == ''">42.42.42.4242424</VsixVersion>
<InformationalVersion>$(VsixVersion)</InformationalVersion>
</PropertyGroup>
</Project>

View File

@ -1,132 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="110" xml:space="preserve">
<value>ASP.NET Core Blazor Language Services</value>
<comment>About dialog title</comment>
</data>
<data name="112" xml:space="preserve">
<value>Provides Visual Studio support for ASP.NET Core Blazor</value>
<comment>About dialog description</comment>
</data>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="400" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>Resources\BlazorPackage.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
</root>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 418 KiB

View File

@ -1,2 +0,0 @@
[$RootKey$\TemplateEngine\Templates\Blazor\0.8.0]
"InstalledPath"="$PackageFolder$\ProjectTemplates"

View File

@ -1,25 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<PackageManifest Version="2.0.0" xmlns="http://schemas.microsoft.com/developer/vsx-schema/2011" xmlns:d="http://schemas.microsoft.com/developer/vsx-schema-design/2011">
<Metadata>
<Identity Id="Microsoft.VisualStudio.BlazorExtension" Version="|%CurrentProject%;GetVsixVersion|" Language="en-US" Publisher="Microsoft" />
<DisplayName>Blazor</DisplayName>
<Description xml:space="preserve">Provides Visual Studio support for Blazor</Description>
<License>Content\LICENSE.txt</License>
<PackageId>Microsoft.VisualStudio.BlazorExtension</PackageId>
<GettingStartedGuide>https://go.microsoft.com/fwlink/?linkid=870449</GettingStartedGuide>
<ReleaseNotes>https://go.microsoft.com/fwlink/?linkid=870448</ReleaseNotes>
<Icon>Content\WebConfiguration.png</Icon>
<PreviewImage>Content\WebConfiguration.png</PreviewImage>
</Metadata>
<Installation AllUsers="true">
<InstallationTarget Id="Microsoft.VisualStudio.Community" Version="[16.2,)" />
</Installation>
<Assets>
<Asset Type="Microsoft.VisualStudio.VsPackage" d:Source="Project" d:ProjectName="%CurrentProject%" Path="|%CurrentProject%;PkgdefProjectOutputGroup|" />
<Asset Type="Microsoft.VisualStudio.VsPackage" d:Source="File" Path="Templates.pkgdef" />
<Asset Type="Microsoft.VisualStudio.VsPackage" d:Source="File" Path="CodeSnippets.pkgdef" />
</Assets>
<Prerequisites>
<Prerequisite Id="Microsoft.VisualStudio.Component.Web" Version="[16.0,)" DisplayName="ASP.NET and web development tools" />
</Prerequisites>
</PackageManifest>

View File

@ -201,8 +201,6 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Mvc.Ne
EndProject EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.JsonPatch", "..\Features\JsonPatch\src\Microsoft.AspNetCore.JsonPatch.csproj", "{DC47C40A-FC38-44E4-94A4-ADE794E76309}" Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.JsonPatch", "..\Features\JsonPatch\src\Microsoft.AspNetCore.JsonPatch.csproj", "{DC47C40A-FC38-44E4-94A4-ADE794E76309}"
EndProject EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.VisualStudio.BlazorExtension", "blazor\BlazorExtension\src\Microsoft.VisualStudio.BlazorExtension.csproj", "{9088E4E4-B855-457F-AE9E-D86709A5E1F4}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{BB236B66-28C0-49DD-9CD4-C4673CD4E7B4}" Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{BB236B66-28C0-49DD-9CD4-C4673CD4E7B4}"
ProjectSection(SolutionItems) = preProject ProjectSection(SolutionItems) = preProject
..\..\.editorconfig = ..\..\.editorconfig ..\..\.editorconfig = ..\..\.editorconfig
@ -1328,18 +1326,6 @@ Global
{DC47C40A-FC38-44E4-94A4-ADE794E76309}.Release|x64.Build.0 = Release|Any CPU {DC47C40A-FC38-44E4-94A4-ADE794E76309}.Release|x64.Build.0 = Release|Any CPU
{DC47C40A-FC38-44E4-94A4-ADE794E76309}.Release|x86.ActiveCfg = Release|Any CPU {DC47C40A-FC38-44E4-94A4-ADE794E76309}.Release|x86.ActiveCfg = Release|Any CPU
{DC47C40A-FC38-44E4-94A4-ADE794E76309}.Release|x86.Build.0 = Release|Any CPU {DC47C40A-FC38-44E4-94A4-ADE794E76309}.Release|x86.Build.0 = Release|Any CPU
{9088E4E4-B855-457F-AE9E-D86709A5E1F4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{9088E4E4-B855-457F-AE9E-D86709A5E1F4}.Debug|Any CPU.Build.0 = Debug|Any CPU
{9088E4E4-B855-457F-AE9E-D86709A5E1F4}.Debug|x64.ActiveCfg = Debug|Any CPU
{9088E4E4-B855-457F-AE9E-D86709A5E1F4}.Debug|x64.Build.0 = Debug|Any CPU
{9088E4E4-B855-457F-AE9E-D86709A5E1F4}.Debug|x86.ActiveCfg = Debug|Any CPU
{9088E4E4-B855-457F-AE9E-D86709A5E1F4}.Debug|x86.Build.0 = Debug|Any CPU
{9088E4E4-B855-457F-AE9E-D86709A5E1F4}.Release|Any CPU.ActiveCfg = Debug|Any CPU
{9088E4E4-B855-457F-AE9E-D86709A5E1F4}.Release|Any CPU.Build.0 = Debug|Any CPU
{9088E4E4-B855-457F-AE9E-D86709A5E1F4}.Release|x64.ActiveCfg = Debug|Any CPU
{9088E4E4-B855-457F-AE9E-D86709A5E1F4}.Release|x64.Build.0 = Debug|Any CPU
{9088E4E4-B855-457F-AE9E-D86709A5E1F4}.Release|x86.ActiveCfg = Debug|Any CPU
{9088E4E4-B855-457F-AE9E-D86709A5E1F4}.Release|x86.Build.0 = Debug|Any CPU
{ED210157-461B-45BB-9D86-B81A62792C30}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {ED210157-461B-45BB-9D86-B81A62792C30}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{ED210157-461B-45BB-9D86-B81A62792C30}.Debug|Any CPU.Build.0 = Debug|Any CPU {ED210157-461B-45BB-9D86-B81A62792C30}.Debug|Any CPU.Build.0 = Debug|Any CPU
{ED210157-461B-45BB-9D86-B81A62792C30}.Debug|x64.ActiveCfg = Debug|Any CPU {ED210157-461B-45BB-9D86-B81A62792C30}.Debug|x64.ActiveCfg = Debug|Any CPU
@ -1593,7 +1579,6 @@ Global
{3FAF725B-A628-4531-9F61-499660CD4347} = {2FC10057-7A0A-4E34-8302-879925BC0102} {3FAF725B-A628-4531-9F61-499660CD4347} = {2FC10057-7A0A-4E34-8302-879925BC0102}
{04262990-929C-42BF-85A9-21C25FA95617} = {2FC10057-7A0A-4E34-8302-879925BC0102} {04262990-929C-42BF-85A9-21C25FA95617} = {2FC10057-7A0A-4E34-8302-879925BC0102}
{DC47C40A-FC38-44E4-94A4-ADE794E76309} = {2FC10057-7A0A-4E34-8302-879925BC0102} {DC47C40A-FC38-44E4-94A4-ADE794E76309} = {2FC10057-7A0A-4E34-8302-879925BC0102}
{9088E4E4-B855-457F-AE9E-D86709A5E1F4} = {7260DED9-22A9-4E9D-92F4-5E8A4404DEAF}
{ED210157-461B-45BB-9D86-B81A62792C30} = {2FC10057-7A0A-4E34-8302-879925BC0102} {ED210157-461B-45BB-9D86-B81A62792C30} = {2FC10057-7A0A-4E34-8302-879925BC0102}
{DA137BD4-F7F1-4D53-855F-5EC40CEA36B0} = {2FC10057-7A0A-4E34-8302-879925BC0102} {DA137BD4-F7F1-4D53-855F-5EC40CEA36B0} = {2FC10057-7A0A-4E34-8302-879925BC0102}
{0CDAB70B-71DC-43BE-ACB7-AD2EE3541FFB} = {2FC10057-7A0A-4E34-8302-879925BC0102} {0CDAB70B-71DC-43BE-ACB7-AD2EE3541FFB} = {2FC10057-7A0A-4E34-8302-879925BC0102}

View File

@ -30,7 +30,6 @@
"Components\\test\\Microsoft.AspNetCore.Components.Tests.csproj", "Components\\test\\Microsoft.AspNetCore.Components.Tests.csproj",
"Server\\src\\Microsoft.AspNetCore.Components.Server.csproj", "Server\\src\\Microsoft.AspNetCore.Components.Server.csproj",
"Server\\test\\Microsoft.AspNetCore.Components.Server.Tests.csproj", "Server\\test\\Microsoft.AspNetCore.Components.Server.Tests.csproj",
"blazor\\BlazorExtension\\src\\Microsoft.VisualStudio.BlazorExtension.csproj",
"test\\E2ETest\\Microsoft.AspNetCore.Components.E2ETests.csproj", "test\\E2ETest\\Microsoft.AspNetCore.Components.E2ETests.csproj",
"test\\testassets\\BasicTestApp\\BasicTestApp.csproj", "test\\testassets\\BasicTestApp\\BasicTestApp.csproj",
"test\\testassets\\ComponentsApp.App\\ComponentsApp.App.csproj", "test\\testassets\\ComponentsApp.App\\ComponentsApp.App.csproj",