Integrate src/Components into mondorepo build system

This commit is contained in:
Steve Sanderson 2018-11-27 11:48:54 +00:00
parent a1c35284e1
commit 16c11b4c87
36 changed files with 239 additions and 564 deletions

View File

@ -29,6 +29,14 @@
<PackageArtifact Include="Microsoft.AspNetCore.Authentication.WsFederation" Category="ship" />
<PackageArtifact Include="Microsoft.AspNetCore.AzureAppServices.HostingStartup" Category="ship" />
<PackageArtifact Include="Microsoft.AspNetCore.AzureAppServicesIntegration" Category="ship" />
<PackageArtifact Include="Microsoft.AspNetCore.Blazor.Cli" Category="ship" />
<PackageArtifact Include="Microsoft.AspNetCore.Blazor.Templates" Category="ship" />
<PackageArtifact Include="Microsoft.AspNetCore.Components" Category="ship" />
<PackageArtifact Include="Microsoft.AspNetCore.Components.Analyzers" Category="ship" />
<PackageArtifact Include="Microsoft.AspNetCore.Components.Browser" Category="ship" />
<PackageArtifact Include="Microsoft.AspNetCore.Components.Build" Category="ship" />
<PackageArtifact Include="Microsoft.AspNetCore.Components.Razor.Extensions" Category="ship" />
<PackageArtifact Include="Microsoft.AspNetCore.Components.Server" Category="ship" />
<PackageArtifact Include="Microsoft.AspNetCore.DataProtection.AzureKeyVault" Category="ship" />
<PackageArtifact Include="Microsoft.AspNetCore.DataProtection.AzureStorage" Category="ship" />
<PackageArtifact Include="Microsoft.AspNetCore.DataProtection.EntityFrameworkCore" Category="ship" />

View File

@ -29,6 +29,7 @@
<RepositoryBuildOrder Include="MusicStore" Order="16" RootPath="$(RepositoryRoot)src\MusicStore\" />
<RepositoryBuildOrder Include="SignalR" Order="16" />
<RepositoryBuildOrder Include="AuthSamples" Order="16" RootPath="$(RepositoryRoot)src\AuthSamples\" />
<RepositoryBuildOrder Include="Templating" Order="17" RootPath="$(RepositoryRoot)src\Templating\" />
<RepositoryBuildOrder Include="Components" Order="17" RootPath="$(RepositoryRoot)src\Components\" />
<RepositoryBuildOrder Include="Templating" Order="18" RootPath="$(RepositoryRoot)src\Templating\" />
</ItemGroup>
</Project>

View File

@ -40,6 +40,7 @@
<Repository Include="Antiforgery" RootPath="$(RepositoryRoot)src\Antiforgery\" />
<Repository Include="AzureIntegration" RootPath="$(RepositoryRoot)src\AzureIntegration\" />
<Repository Include="BasicMiddleware" />
<Repository Include="Components" RootPath="$(RepositoryRoot)src\Components\" />
<Repository Include="CORS" RootPath="$(RepositoryRoot)src\CORS\" />
<Repository Include="HttpSysServer" RootPath="$(RepositoryRoot)src\HttpSysServer\" />
<Repository Include="Identity" />

View File

@ -1,3 +0,0 @@
# Code of Conduct
This project has adopted the code of conduct defined by the Contributor Covenant to clarify expected behavior in our community. For more information, see the [.NET Foundation Code of Conduct](https://dotnetfoundation.org/code-of-conduct).

View File

@ -1,40 +0,0 @@
# How to contribute
There are lots of ways to contribute to Blazor and we appreciate the help from the community. You can provide feedback, report bugs, give suggestions, contribute code, and participate in the discussion.
## Code of conduct
To better foster an open, innovative and inclusive community please refer to our [Code of Conduct](CODE_OF_CONDUCT.md) when contributing.
## Provide feedback
Since Blazor is currently an experimental project, its primary focus at this time is to explore potential long term directions and to collect feedback. We rely on feedback from users and the community to help us determine if Blazor is heading in the right direction. We want to hear about your experience, scenarios, and requirements.
### Report a bug
If you think you've found a non-security related bug, please log a new issue in the [Blazor GitHub issue tracker](https://github.com/aspnet/Blazor/issues). When filing issues, please use our [bug filing template](https://github.com/aspnet/Home/wiki/Functional-bug-template).
The best way to get your bug fixed is to be as detailed as you can be about the problem.
Providing a minimal project with steps to reproduce the problem is ideal.
Here are questions you can answer before you file a bug to make sure you're not missing any important information.
1. Did you read the [documentation](https://blazor.net/docs/index.html)?
2. Did you include the snippet of broken code in the issue?
3. What are the *EXACT* steps to reproduce this problem?
4. What specific version or build are you using?
5. What operating system are you using?
GitHub supports [markdown](https://help.github.com/articles/github-flavored-markdown/), so when filing bugs make sure you check the formatting before clicking submit.
> Note: Security issues and bugs should be reported privately, via email, to the Microsoft Security Response Center (MSRC) secure@microsoft.com. You should receive a response within 24 hours. If for some reason you do not, please follow up via email to ensure we received your original message. Further information, including the MSRC PGP key, can be found in the [Security TechCenter](https://www.microsoft.com/en-us/msrc/).
### Make a suggestion
If you have an idea for a new feature or enhancement let us know by filing an [issue](https://github.com/aspnet/blazor/issues). To help us understand and prioritize your idea please provide as much detail about your scenario and why the feature or enhancement would be useful.
### Ask questions
If you have a question be sure to first checkout our [documentation](https://github.com/aspnet/blazor/wiki). You can also ask your question on [Stack Overflow](https://stackoverflow.com/) with the [blazor](https://stackoverflow.com/questions/tagged/blazor) tag to get help from the community. But if you're still stuck, file an [issue](https://github.com/aspnet/blazor/issues) and we'll do our best to answer it.
## Contributing code and content
Blazor is an open source project and we welcome code and content contributions from the community. For details on how to submit a PR please see the ["Contributing code and content" section of the ASP.NET Contributing Guide](https://github.com/aspnet/Home/blob/master/CONTRIBUTING.md#contributing-code-and-content).

View File

@ -1,34 +1,23 @@
<Project>
<Import
Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), AspNetCoreSettings.props))\AspNetCoreSettings.props"
Condition=" '$(CI)' != 'true' AND '$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), AspNetCoreSettings.props))' != '' " />
<Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory)..\, Directory.Build.props))\Directory.Build.props" />
<Import Project="version.props" />
<Import Project="build\dependencies.props" />
<PropertyGroup>
<Product>Microsoft ASP.NET Core Blazor</Product>
<RepositoryUrl>https://github.com/aspnet/blazor</RepositoryUrl>
<RepositoryType>git</RepositoryType>
<RepositoryRoot>$(MSBuildThisFileDirectory)</RepositoryRoot>
<AssemblyOriginatorKeyFile>$(MSBuildThisFileDirectory)build\Key.snk</AssemblyOriginatorKeyFile>
<SignAssembly>true</SignAssembly>
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
<AssemblySigningCertName>Microsoft</AssemblySigningCertName>
<LangVersion>7.3</LangVersion>
<PackageTags>aspnetcore;components</PackageTags>
<PackageIconUrl>https://go.microsoft.com/fwlink/?LinkID=288859</PackageIconUrl>
<PackageRequireLicenseAcceptance>true</PackageRequireLicenseAcceptance>
<!-- Disable API baseline checks. -->
<EnableApiCheck>false</EnableApiCheck>
<!-- So we can use the tool from source within the repo without having to pack -->
<BlazorToolsDir>$(MSBuildThisFileDirectory)src\Microsoft.AspNetCore.Components.Build\bin\$(Configuration)\netcoreapp2.1\</BlazorToolsDir>
</PropertyGroup>
<Import Project="build\arcade.props" />
<PropertyGroup>
<!-- So we can use the tool from source within the repo without having to pack -->
<BlazorToolsDir>$(ArtifactsBinDir)Microsoft.AspNetCore.Components.Build\netcoreapp2.1\</BlazorToolsDir>
<AddImplicitReferences>false</AddImplicitReferences>
<IsSubfolderBuild>true</IsSubfolderBuild>
<!-- Workaround microsoft/msbuild#3626 -->
<AddSyntheticProjectReferencesForSolutionDependencies>false</AddSyntheticProjectReferencesForSolutionDependencies>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Internal.AspNetCore.Sdk" PrivateAssets="All" Version="$(InternalAspNetCoreSdkPackageVersion)" />
</ItemGroup>
</Project>

View File

@ -0,0 +1,161 @@
{
"adx": {
"rules": [
"AdxVerificationCompositeRule"
],
"packages": {
"Microsoft.AspNetCore.Components.Build": {
"Exclusions": {
"ASSEMBLY_COMPANY": {
"tools/Mono.Cecil.dll": "External package",
"tools/Mono.Cecil.Mdb.dll": "External package",
"tools/Mono.Cecil.Pdb.dll": "External package",
"tools/Mono.Cecil.Rocks.dll": "External package"
},
"BUILD_ITEMS_FRAMEWORK": {
"*": "The netstandard output is purely MSBuild targets"
},
"DOC_MISSING": {
"lib/netstandard1.0/Microsoft.AspNetCore.Components.TagHelperWorkaround.dll": "Not user visible"
},
"ASSEMBLY_DESCRIPTION": {
"tools/Microsoft.CodeAnalysis.CSharp.dll": "External package",
"tools/Microsoft.CodeAnalysis.dll": "External package",
"tools/Microsoft.JSInterop.dll": "External package",
"tools/Mono.Cecil.dll": "External package",
"tools/Mono.Cecil.Mdb.dll": "External package",
"tools/Mono.Cecil.Pdb.dll": "External package",
"tools/Mono.Cecil.Rocks.dll": "External package"
},
"NEUTRAL_RESOURCES_LANGUAGE": {
"tools/Microsoft.CodeAnalysis.CSharp.dll": "External package",
"tools/Microsoft.CodeAnalysis.dll": "External package",
"tools/Mono.Cecil.dll": "External package",
"tools/Mono.Cecil.Mdb.dll": "External package",
"tools/Mono.Cecil.Pdb.dll": "External package",
"tools/Mono.Cecil.Rocks.dll": "External package",
"tools/System.Runtime.CompilerServices.Unsafe.dll": "External package"
},
"ASSEMBLY_PRODUCT": {
"tools/Microsoft.CodeAnalysis.CSharp.dll": "External package",
"tools/Microsoft.CodeAnalysis.dll": "External package"
},
"SERVICING_ATTRIBUTE": {
"tools/AngleSharp.dll": "External package",
"tools/Mono.Cecil.dll": "External package",
"tools/Mono.Cecil.Mdb.dll": "External package",
"tools/Mono.Cecil.Pdb.dll": "External package",
"tools/Mono.Cecil.Rocks.dll": "External package"
},
"WRONG_PUBLICKEYTOKEN": {
"tools/AngleSharp.dll": "External package",
"tools/Microsoft.CodeAnalysis.CSharp.dll": "External package",
"tools/Microsoft.CodeAnalysis.dll": "External package",
"tools/Mono.Cecil.dll": "External package",
"tools/Mono.Cecil.Mdb.dll": "External package",
"tools/Mono.Cecil.Pdb.dll": "External package",
"tools/Mono.Cecil.Rocks.dll": "External package",
"tools/System.CodeDom.dll": "External package",
"tools/System.Runtime.CompilerServices.Unsafe.dll": "External package",
"tools/runtimes/unix/lib/netstandard1.3/System.Text.Encoding.CodePages.dll": "External package",
"tools/runtimes/win/lib/netstandard1.3/System.Text.Encoding.CodePages.dll": "External package"
},
"ASSEMBLY_INFORMATIONAL_VERSION_MISMATCH": {
"tools/AngleSharp.dll": "External package",
"tools/Microsoft.AspNetCore.Razor.Language.dll": "External package",
"tools/Microsoft.CodeAnalysis.CSharp.dll": "External package",
"tools/Microsoft.CodeAnalysis.dll": "External package",
"tools/Microsoft.CodeAnalysis.Razor.dll": "External package",
"tools/Microsoft.Extensions.CommandLineUtils.dll": "External package",
"tools/Microsoft.Extensions.FileProviders.Abstractions.dll": "External package",
"tools/Microsoft.Extensions.FileProviders.Composite.dll": "External package",
"tools/Microsoft.Extensions.FileProviders.Embedded.dll": "External package",
"tools/Microsoft.Extensions.FileProviders.Physical.dll": "External package",
"tools/Microsoft.Extensions.FileSystemGlobbing.dll": "External package",
"tools/Microsoft.Extensions.Primitives.dll": "External package",
"tools/Microsoft.JSInterop.dll": "External package",
"tools/Mono.Cecil.dll": "External package",
"tools/Mono.Cecil.Mdb.dll": "External package",
"tools/Mono.Cecil.Pdb.dll": "External package",
"tools/Mono.Cecil.Rocks.dll": "External package",
"tools/System.CodeDom.dll": "External package",
"tools/System.Runtime.CompilerServices.Unsafe.dll": "External package",
"tools/runtimes/unix/lib/netstandard1.3/System.Text.Encoding.CodePages.dll": "External package",
"tools/runtimes/win/lib/netstandard1.3/System.Text.Encoding.CodePages.dll": "External package"
},
"ASSEMBLY_FILE_VERSION_MISMATCH": {
"tools/AngleSharp.dll": "External package",
"tools/Microsoft.AspNetCore.Razor.Language.dll": "External package",
"tools/Microsoft.CodeAnalysis.CSharp.dll": "External package",
"tools/Microsoft.CodeAnalysis.dll": "External package",
"tools/Microsoft.CodeAnalysis.Razor.dll": "External package",
"tools/Microsoft.Extensions.CommandLineUtils.dll": "External package",
"tools/Microsoft.Extensions.FileProviders.Abstractions.dll": "External package",
"tools/Microsoft.Extensions.FileProviders.Composite.dll": "External package",
"tools/Microsoft.Extensions.FileProviders.Embedded.dll": "External package",
"tools/Microsoft.Extensions.FileProviders.Physical.dll": "External package",
"tools/Microsoft.Extensions.FileSystemGlobbing.dll": "External package",
"tools/Microsoft.Extensions.Primitives.dll": "External package",
"tools/Microsoft.JSInterop.dll": "External package",
"tools/Mono.Cecil.dll": "External package",
"tools/Mono.Cecil.Mdb.dll": "External package",
"tools/Mono.Cecil.Pdb.dll": "External package",
"tools/Mono.Cecil.Rocks.dll": "External package",
"tools/System.CodeDom.dll": "External package",
"tools/System.Runtime.CompilerServices.Unsafe.dll": "External package",
"tools/runtimes/unix/lib/netstandard1.3/System.Text.Encoding.CodePages.dll": "External package",
"tools/runtimes/win/lib/netstandard1.3/System.Text.Encoding.CodePages.dll": "External package"
},
"ASSEMBLY_VERSION_MISMATCH": {
"tools/AngleSharp.dll": "External package",
"tools/Microsoft.AspNetCore.Razor.Language.dll": "External package",
"tools/Microsoft.CodeAnalysis.CSharp.dll": "External package",
"tools/Microsoft.CodeAnalysis.dll": "External package",
"tools/Microsoft.CodeAnalysis.Razor.dll": "External package",
"tools/Microsoft.Extensions.CommandLineUtils.dll": "External package",
"tools/Microsoft.Extensions.FileProviders.Abstractions.dll": "External package",
"tools/Microsoft.Extensions.FileProviders.Composite.dll": "External package",
"tools/Microsoft.Extensions.FileProviders.Embedded.dll": "External package",
"tools/Microsoft.Extensions.FileProviders.Physical.dll": "External package",
"tools/Microsoft.Extensions.FileSystemGlobbing.dll": "External package",
"tools/Microsoft.Extensions.Primitives.dll": "External package",
"tools/Microsoft.JSInterop.dll": "External package",
"tools/Mono.Cecil.dll": "External package",
"tools/Mono.Cecil.Mdb.dll": "External package",
"tools/Mono.Cecil.Pdb.dll": "External package",
"tools/Mono.Cecil.Rocks.dll": "External package",
"tools/System.CodeDom.dll": "External package",
"tools/System.Runtime.CompilerServices.Unsafe.dll": "External package",
"tools/runtimes/unix/lib/netstandard1.3/System.Text.Encoding.CodePages.dll": "External package",
"tools/runtimes/win/lib/netstandard1.3/System.Text.Encoding.CodePages.dll": "External package"
}
}
},
"Microsoft.AspNetCore.Blazor.Cli": {
"Exclusions": {
"SIGN_STRONGNAME": {
"lib/netcoreapp2.1/dotnet-blazor.dll": "See comments in Microsoft.AspNetCore.Blazor.Cli.csproj"
},
"WRONG_PUBLICKEYTOKEN": {
"lib/netcoreapp2.1/dotnet-blazor.dll": "See comments in Microsoft.AspNetCore.Blazor.Cli.csproj"
}
}
},
"Microsoft.AspNetCore.Blazor.Templates": {
"Exclusions": {
"PACKAGE_MISSING_REPO_COMMIT": {
"*": "Not presently available"
},
"PACKAGE_TYPE_UNEXPECTED": {
"*": "It's a templates package"
}
}
}
}
},
"Default": {
"rules": [
"DefaultCompositeRule"
]
}
}

View File

@ -0,0 +1,4 @@
<Project>
<Import Project="..\Directory.Build.props" />
<Import Project=".\version.props" />
</Project>

View File

@ -3,5 +3,5 @@
<!-- Workaround for #261 which requires the bin and obj directory be in the project directory -->
<DisableArcadeProjectLayout>true</DisableArcadeProjectLayout>
</PropertyGroup>
<Import Project="..\..\..\Directory.Build.props" />
<Import Project="..\..\Directory.Build.props" />
</Project>

View File

@ -3,5 +3,5 @@
<!-- Workaround for #261 which requires the bin and obj directory be in the project directory -->
<DisableArcadeProjectLayout>true</DisableArcadeProjectLayout>
</PropertyGroup>
<Import Project="..\..\Directory.Build.props" />
<Import Project="..\Directory.Build.props" />
</Project>

View File

@ -1,5 +1,5 @@
<Project>
<Import Project="..\..\Directory.Build.props" />
<Import Project="..\Directory.Build.props" />
<PropertyGroup>
<GenerateDocumentationFile>true</GenerateDocumentationFile>

View File

@ -8,6 +8,7 @@
<StartupObject>Microsoft.AspNetCore.Blazor.Cli.Program</StartupObject>
<!-- Disabled because E2ETest.csproj needs to WebDriver which is not strong named signed, and InternalsVisibleTo must specify a strong-name token -->
<SignAssembly>false</SignAssembly>
<Description>Development server for use when building Blazor applications.</Description>
</PropertyGroup>
<ItemGroup>

View File

@ -6,8 +6,15 @@
<GenerateAssemblyInfo>False</GenerateAssemblyInfo>
<IncludeBuildOutput>False</IncludeBuildOutput>
<NoWarn>2008</NoWarn>
<Description>Templates for ASP.NET Core Blazor projects.</Description>
</PropertyGroup>
<ItemGroup>
<ExcludePackageFileFromSigning Include="content/**/*.js" />
<ExcludePackageFileFromSigning Include="content/**/*.otf" />
<ExcludePackageFileFromSigning Include="content/**/*.ttf" />
</ItemGroup>
<Target Name="TransformTemplateConfigs" BeforeTargets="CoreBuild" DependsOnTargets="SetTemplateJsonSymbolReplacements">
<!--
For each template, copy its '.template.config.src' directory to '.template.config',

View File

@ -8,7 +8,7 @@
<iconUrl>http://go.microsoft.com/fwlink/?LinkID=288859</iconUrl>
<language>en-US</language>
<projectUrl>https://asp.net/</projectUrl>
<repository type="git" url="https://github.com/aspnet/Blazor" />
<repository type="git" url="https://github.com/aspnet/Blazor" commit="$RepositoryCommit$" />
<licenseUrl>https://www.microsoft.com/web/webpi/eula/net_library_eula_enu.htm</licenseUrl>
<copyright>© Microsoft Corporation. All rights reserved.</copyright>
<requireLicenseAcceptance>true</requireLicenseAcceptance>

View File

@ -22,7 +22,8 @@
IncludeCustomRestoreSources=$(IncludeCustomRestoreSourcesValue);
TemplateBlazorVersion=$(PackageVersion);
TemplateRazorDesignPackageVersion=$(TemplateRazorDesignPackageVersion);
RepositoryCommit=$(RepositoryCommit);
</GeneratedContentProperties>
</PropertyGroup>
</PropertyGroup>
</Target>
</Project>

View File

@ -11,7 +11,7 @@
</PropertyGroup>
<Import Project="..\..\..\build\arcade.props" />
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<Import Project="..\..\..\version.props" />
<Import Project="..\..\version.props" />
<!--
Since the VSSDK doeesn't support SDK-based projects, we have to use the long/verbose version.
@ -138,7 +138,7 @@
<IncludeOutputGroupsInVSIXLocalOnly>
</IncludeOutputGroupsInVSIXLocalOnly>
</ProjectReference>
<Content Include="$(ArtifactsBinDir)Microsoft.AspNetCore.Components.Razor.Extensions\net461\Microsoft.AspNetCore.Components.Razor.Extensions.dll">
<Content Include="..\..\..\src\Microsoft.AspNetCore.Components.Razor.Extensions\bin\$(Configuration)\net461\Microsoft.AspNetCore.Components.Razor.Extensions.dll">
<Link>Microsoft.AspNetCore.Components.Razor.Extensions.dll</Link>
<IncludeInVSIX>true</IncludeInVSIX>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
@ -153,7 +153,7 @@
<IncludeOutputGroupsInVSIXLocalOnly>
</IncludeOutputGroupsInVSIXLocalOnly>
</ProjectReference>
<Content Include="$(ArtifactsBinDir)Microsoft.VisualStudio.LanguageServices.Blazor\net461\Microsoft.VisualStudio.LanguageServices.Blazor.dll">
<Content Include="..\Microsoft.VisualStudio.LanguageServices.Blazor\bin\$(Configuration)\net461\Microsoft.VisualStudio.LanguageServices.Blazor.dll">
<Link>Microsoft.VisualStudio.LanguageServices.Blazor.dll</Link>
<IncludeInVSIX>true</IncludeInVSIX>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>

View File

@ -13,8 +13,8 @@ using Microsoft.VisualStudio.Shell;
GenerateCodeBase = true,
PublicKeyToken = "",
OldVersionLowerBound = "0.0.0.0",
OldVersionUpperBound = "0.8.0.0",
NewVersion = "0.8.0.0")]
OldVersionUpperBound = "3.0.0.0",
NewVersion = "3.0.0.0")]
[assembly: ProvideBindingRedirection(
AssemblyName = "Microsoft.VisualStudio.LanguageServices.Blazor",
GenerateCodeBase = true,

View File

@ -1,11 +1,12 @@
<Project>
<PropertyGroup>
<!-- When editing any version prefix here, remember also to update
blazor\tooling\Microsoft.VisualStudio.BlazorExtension\Properties\AssemblyInfo.cs
tooling\Microsoft.VisualStudio.BlazorExtension\Properties\AssemblyInfo.cs
to include the new version in its upper bounds -->
<IsFinalBuild>false</IsFinalBuild>
<VersionPrefix>0.8.0</VersionPrefix>
<VersionSuffix>preview1</VersionSuffix>
<PackageVersion></PackageVersion> <!-- Override anything set at the repo level -->
<PackageVersion Condition="'$(IsFinalBuild)' == 'true' AND '$(VersionSuffix)' == 'rtm' ">$(VersionPrefix)</PackageVersion>
<PackageVersion Condition="'$(IsFinalBuild)' == 'true' AND '$(VersionSuffix)' != 'rtm' ">$(VersionPrefix)-$(VersionSuffix)-final</PackageVersion>
<!-- use the build number from VSTS -->

View File

@ -1,2 +1,3 @@
@ECHO OFF
PowerShell -NoProfile -NoLogo -ExecutionPolicy unrestricted -Command "[System.Threading.Thread]::CurrentThread.CurrentCulture = ''; [System.Threading.Thread]::CurrentThread.CurrentUICulture = '';& '%~dp0run.ps1' default-build %*; exit $LASTEXITCODE"
SET RepoRoot="%~dp0..\.."
%RepoRoot%\build.cmd -LockFile %RepoRoot%\korebuild-lock.txt -Path %~dp0 %*

View File

@ -1,8 +1,7 @@
#!/usr/bin/env bash
set -euo pipefail
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
# Call "sync" between "chmod" and execution to prevent "text file busy" error in Docker (aufs)
chmod +x "$DIR/run.sh"; sync
"$DIR/run.sh" default-build "$@"
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
repo_root="$DIR/../.."
"$repo_root/build.sh" --path "$DIR" --lockfile "$repo_root/korebuild-lock.txt" "$@"

View File

@ -21,6 +21,4 @@
<!-- When updating this, ensure you also update Browser.JS/package.json to reference the corresponding version of @dotnet/jsinterop -->
<JSInteropPackageVersion>0.8.0-preview1-20181126.1</JSInteropPackageVersion>
</PropertyGroup>
<Import Project="$(DotNetPackageVersionPropsPath)" Condition=" '$(DotNetPackageVersionPropsPath)' != '' " />
</Project>

View File

@ -6,7 +6,7 @@
<BuildDir>$(ArtifactsDir)$(Configuration)\packages\</BuildDir>
<SkipArtifactVerification>true</SkipArtifactVerification>
<EnableBenchmarkValidation>false</EnableBenchmarkValidation>
<SignToolDataFile>$(MSBuildThisFileDirectory)SignToolData.json</SignToolDataFile>
<SignCheckExclusionsFile>$(MSBuildThisFileDirectory)..\..\..\eng\signcheck.exclusions.txt</SignCheckExclusionsFile>
<SignToolDataWorkingDir>$(ArtifactsDir)\$(Configuration)\</SignToolDataWorkingDir>
</PropertyGroup>

View File

@ -1,8 +0,0 @@
{
"sdk": {
"version": "2.1.400"
},
"msbuild-sdks": {
"Internal.AspNetCore.Sdk": "2.2.0-preview1-20181001.1"
}
}

View File

@ -1,2 +0,0 @@
version:2.2.0-preview1-20181001.1
commithash:b4d9869fc1acead6346a1067d1642544d0c389ff

View File

@ -1,2 +0,0 @@
@ECHO OFF
PowerShell -NoProfile -NoLogo -ExecutionPolicy unrestricted -Command "[System.Threading.Thread]::CurrentThread.CurrentCulture = ''; [System.Threading.Thread]::CurrentThread.CurrentUICulture = '';& '%~dp0run.ps1' %*; exit $LASTEXITCODE"

View File

@ -1,208 +0,0 @@
#!/usr/bin/env powershell
#requires -version 4
<#
.SYNOPSIS
Executes KoreBuild commands.
.DESCRIPTION
Downloads korebuild if required. Then executes the KoreBuild command. To see available commands, execute with `-Command help`.
.PARAMETER Command
The KoreBuild command to run.
.PARAMETER Path
The folder to build. Defaults to the folder containing this script.
.PARAMETER Channel
The channel of KoreBuild to download. Overrides the value from the config file.
.PARAMETER DotNetHome
The directory where .NET Core tools will be stored.
.PARAMETER ToolsSource
The base url where build tools can be downloaded. Overrides the value from the config file.
.PARAMETER Update
Updates KoreBuild to the latest version even if a lock file is present.
.PARAMETER Reinstall
Re-installs KoreBuild
.PARAMETER ConfigFile
The path to the configuration file that stores values. Defaults to korebuild.json.
.PARAMETER ToolsSourceSuffix
The Suffix to append to the end of the ToolsSource. Useful for query strings in blob stores.
.PARAMETER CI
Sets up CI specific settings and variables.
.PARAMETER Arguments
Arguments to be passed to the command
.NOTES
This function will create a file $PSScriptRoot/korebuild-lock.txt. This lock file can be committed to source, but does not have to be.
When the lockfile is not present, KoreBuild will create one using latest available version from $Channel.
The $ConfigFile is expected to be an JSON file. It is optional, and the configuration values in it are optional as well. Any options set
in the file are overridden by command line parameters.
.EXAMPLE
Example config file:
```json
{
"$schema": "https://raw.githubusercontent.com/aspnet/BuildTools/dev/tools/korebuild.schema.json",
"channel": "dev",
"toolsSource": "https://aspnetcore.blob.core.windows.net/buildtools"
}
```
#>
[CmdletBinding(PositionalBinding = $false)]
param(
[Parameter(Mandatory = $true, Position = 0)]
[string]$Command,
[string]$Path = $PSScriptRoot,
[Alias('c')]
[string]$Channel,
[Alias('d')]
[string]$DotNetHome,
[Alias('s')]
[string]$ToolsSource,
[Alias('u')]
[switch]$Update,
[switch]$Reinstall,
[string]$ToolsSourceSuffix,
[string]$ConfigFile = $null,
[switch]$CI,
[Parameter(ValueFromRemainingArguments = $true)]
[string[]]$Arguments
)
Set-StrictMode -Version 2
$ErrorActionPreference = 'Stop'
#
# Functions
#
function Get-KoreBuild {
$lockFile = Join-Path $Path 'korebuild-lock.txt'
if (!(Test-Path $lockFile) -or $Update) {
Get-RemoteFile "$ToolsSource/korebuild/channels/$Channel/latest.txt" $lockFile $ToolsSourceSuffix
}
$version = Get-Content $lockFile | Where-Object { $_ -like 'version:*' } | Select-Object -first 1
if (!$version) {
Write-Error "Failed to parse version from $lockFile. Expected a line that begins with 'version:'"
}
$version = $version.TrimStart('version:').Trim()
$korebuildPath = Join-Paths $DotNetHome ('buildtools', 'korebuild', $version)
if ($Reinstall -and (Test-Path $korebuildPath)) {
Remove-Item -Force -Recurse $korebuildPath
}
if (!(Test-Path $korebuildPath)) {
Write-Host -ForegroundColor Magenta "Downloading KoreBuild $version"
New-Item -ItemType Directory -Path $korebuildPath | Out-Null
$remotePath = "$ToolsSource/korebuild/artifacts/$version/korebuild.$version.zip"
try {
$tmpfile = Join-Path ([IO.Path]::GetTempPath()) "KoreBuild-$([guid]::NewGuid()).zip"
Get-RemoteFile $remotePath $tmpfile $ToolsSourceSuffix
if (Get-Command -Name 'Microsoft.PowerShell.Archive\Expand-Archive' -ErrorAction Ignore) {
# Use built-in commands where possible as they are cross-plat compatible
Microsoft.PowerShell.Archive\Expand-Archive -Path $tmpfile -DestinationPath $korebuildPath
}
else {
# Fallback to old approach for old installations of PowerShell
Add-Type -AssemblyName System.IO.Compression.FileSystem
[System.IO.Compression.ZipFile]::ExtractToDirectory($tmpfile, $korebuildPath)
}
}
catch {
Remove-Item -Recurse -Force $korebuildPath -ErrorAction Ignore
throw
}
finally {
Remove-Item $tmpfile -ErrorAction Ignore
}
}
return $korebuildPath
}
function Join-Paths([string]$path, [string[]]$childPaths) {
$childPaths | ForEach-Object { $path = Join-Path $path $_ }
return $path
}
function Get-RemoteFile([string]$RemotePath, [string]$LocalPath, [string]$RemoteSuffix) {
if ($RemotePath -notlike 'http*') {
Copy-Item $RemotePath $LocalPath
return
}
$retries = 10
while ($retries -gt 0) {
$retries -= 1
try {
Invoke-WebRequest -UseBasicParsing -Uri $($RemotePath + $RemoteSuffix) -OutFile $LocalPath
return
}
catch {
Write-Verbose "Request failed. $retries retries remaining"
}
}
Write-Error "Download failed: '$RemotePath'."
}
#
# Main
#
# Load configuration or set defaults
$Path = Resolve-Path $Path
if (!$ConfigFile) { $ConfigFile = Join-Path $Path 'korebuild.json' }
if (Test-Path $ConfigFile) {
try {
$config = Get-Content -Raw -Encoding UTF8 -Path $ConfigFile | ConvertFrom-Json
if ($config) {
if (!($Channel) -and (Get-Member -Name 'channel' -InputObject $config)) { [string] $Channel = $config.channel }
if (!($ToolsSource) -and (Get-Member -Name 'toolsSource' -InputObject $config)) { [string] $ToolsSource = $config.toolsSource}
}
}
catch {
Write-Warning "$ConfigFile could not be read. Its settings will be ignored."
Write-Warning $Error[0]
}
}
if (!$DotNetHome) {
$DotNetHome = if ($env:DOTNET_HOME) { $env:DOTNET_HOME } `
elseif ($env:USERPROFILE) { Join-Path $env:USERPROFILE '.dotnet'} `
elseif ($env:HOME) {Join-Path $env:HOME '.dotnet'}`
else { Join-Path $PSScriptRoot '.dotnet'}
}
if (!$Channel) { $Channel = 'dev' }
if (!$ToolsSource) { $ToolsSource = 'https://aspnetcore.blob.core.windows.net/buildtools' }
# Execute
$korebuildPath = Get-KoreBuild
Import-Module -Force -Scope Local (Join-Path $korebuildPath 'KoreBuild.psd1')
try {
Set-KoreBuildSettings -ToolsSource $ToolsSource -DotNetHome $DotNetHome -RepoPath $Path -ConfigFile $ConfigFile -CI:$CI
Invoke-KoreBuildCommand $Command @Arguments
}
finally {
Remove-Module 'KoreBuild' -ErrorAction Ignore
}

View File

@ -1,245 +0,0 @@
#!/usr/bin/env bash
set -euo pipefail
#
# variables
#
RESET="\033[0m"
RED="\033[0;31m"
YELLOW="\033[0;33m"
MAGENTA="\033[0;95m"
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
[ -z "${DOTNET_HOME:-}" ] && DOTNET_HOME="$HOME/.dotnet"
verbose=false
update=false
reinstall=false
repo_path="$DIR"
channel=''
tools_source=''
tools_source_suffix=''
ci=false
#
# Functions
#
__usage() {
echo "Usage: $(basename "${BASH_SOURCE[0]}") command [options] [[--] <Arguments>...]"
echo ""
echo "Arguments:"
echo " command The command to be run."
echo " <Arguments>... Arguments passed to the command. Variable number of arguments allowed."
echo ""
echo "Options:"
echo " --verbose Show verbose output."
echo " -c|--channel <CHANNEL> The channel of KoreBuild to download. Overrides the value from the config file.."
echo " --config-file <FILE> The path to the configuration file that stores values. Defaults to korebuild.json."
echo " -d|--dotnet-home <DIR> The directory where .NET Core tools will be stored. Defaults to '\$DOTNET_HOME' or '\$HOME/.dotnet."
echo " --path <PATH> The directory to build. Defaults to the directory containing the script."
echo " -s|--tools-source|-ToolsSource <URL> The base url where build tools can be downloaded. Overrides the value from the config file."
echo " --tools-source-suffix|-ToolsSourceSuffix <SUFFIX> The suffix to append to tools-source. Useful for query strings."
echo " -u|--update Update to the latest KoreBuild even if the lock file is present."
echo " --reinstall Reinstall KoreBuild."
echo " --ci Apply CI specific settings and environment variables."
echo ""
echo "Description:"
echo " This function will create a file \$DIR/korebuild-lock.txt. This lock file can be committed to source, but does not have to be."
echo " When the lockfile is not present, KoreBuild will create one using latest available version from \$channel."
if [[ "${1:-}" != '--no-exit' ]]; then
exit 2
fi
}
get_korebuild() {
local version
local lock_file="$repo_path/korebuild-lock.txt"
if [ ! -f "$lock_file" ] || [ "$update" = true ]; then
__get_remote_file "$tools_source/korebuild/channels/$channel/latest.txt" "$lock_file" "$tools_source_suffix"
fi
version="$(grep 'version:*' -m 1 "$lock_file")"
if [[ "$version" == '' ]]; then
__error "Failed to parse version from $lock_file. Expected a line that begins with 'version:'"
return 1
fi
version="$(echo "${version#version:}" | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//')"
local korebuild_path="$DOTNET_HOME/buildtools/korebuild/$version"
if [ "$reinstall" = true ] && [ -d "$korebuild_path" ]; then
rm -rf "$korebuild_path"
fi
{
if [ ! -d "$korebuild_path" ]; then
mkdir -p "$korebuild_path"
local remote_path="$tools_source/korebuild/artifacts/$version/korebuild.$version.zip"
tmpfile="$(mktemp)"
echo -e "${MAGENTA}Downloading KoreBuild ${version}${RESET}"
if __get_remote_file "$remote_path" "$tmpfile" "$tools_source_suffix"; then
unzip -q -d "$korebuild_path" "$tmpfile"
fi
rm "$tmpfile" || true
fi
source "$korebuild_path/KoreBuild.sh"
} || {
if [ -d "$korebuild_path" ]; then
echo "Cleaning up after failed installation"
rm -rf "$korebuild_path" || true
fi
return 1
}
}
__error() {
echo -e "${RED}error: $*${RESET}" 1>&2
}
__warn() {
echo -e "${YELLOW}warning: $*${RESET}"
}
__machine_has() {
hash "$1" > /dev/null 2>&1
return $?
}
__get_remote_file() {
local remote_path=$1
local local_path=$2
local remote_path_suffix=$3
if [[ "$remote_path" != 'http'* ]]; then
cp "$remote_path" "$local_path"
return 0
fi
local failed=false
if __machine_has wget; then
wget --tries 10 --quiet -O "$local_path" "${remote_path}${remote_path_suffix}" || failed=true
else
failed=true
fi
if [ "$failed" = true ] && __machine_has curl; then
failed=false
curl --retry 10 -sSL -f --create-dirs -o "$local_path" "${remote_path}${remote_path_suffix}" || failed=true
fi
if [ "$failed" = true ]; then
__error "Download failed: $remote_path" 1>&2
return 1
fi
}
#
# main
#
command="${1:-}"
shift
while [[ $# -gt 0 ]]; do
case $1 in
-\?|-h|--help)
__usage --no-exit
exit 0
;;
-c|--channel|-Channel)
shift
channel="${1:-}"
[ -z "$channel" ] && __usage
;;
--config-file|-ConfigFile)
shift
config_file="${1:-}"
[ -z "$config_file" ] && __usage
if [ ! -f "$config_file" ]; then
__error "Invalid value for --config-file. $config_file does not exist."
exit 1
fi
;;
-d|--dotnet-home|-DotNetHome)
shift
DOTNET_HOME="${1:-}"
[ -z "$DOTNET_HOME" ] && __usage
;;
--path|-Path)
shift
repo_path="${1:-}"
[ -z "$repo_path" ] && __usage
;;
-s|--tools-source|-ToolsSource)
shift
tools_source="${1:-}"
[ -z "$tools_source" ] && __usage
;;
--tools-source-suffix|-ToolsSourceSuffix)
shift
tools_source_suffix="${1:-}"
[ -z "$tools_source_suffix" ] && __usage
;;
-u|--update|-Update)
update=true
;;
--reinstall|-[Rr]einstall)
reinstall=true
;;
--ci|-[Cc][Ii])
ci=true
;;
--verbose|-Verbose)
verbose=true
;;
--)
shift
break
;;
*)
break
;;
esac
shift
done
if ! __machine_has unzip; then
__error 'Missing required command: unzip'
exit 1
fi
if ! __machine_has curl && ! __machine_has wget; then
__error 'Missing required command. Either wget or curl is required.'
exit 1
fi
[ -z "${config_file:-}" ] && config_file="$repo_path/korebuild.json"
if [ -f "$config_file" ]; then
if __machine_has jq ; then
if jq '.' "$config_file" >/dev/null ; then
config_channel="$(jq -r 'select(.channel!=null) | .channel' "$config_file")"
config_tools_source="$(jq -r 'select(.toolsSource!=null) | .toolsSource' "$config_file")"
else
__warn "$config_file is invalid JSON. Its settings will be ignored."
fi
elif __machine_has python ; then
if python -c "import json,codecs;obj=json.load(codecs.open('$config_file', 'r', 'utf-8-sig'))" >/dev/null ; then
config_channel="$(python -c "import json,codecs;obj=json.load(codecs.open('$config_file', 'r', 'utf-8-sig'));print(obj['channel'] if 'channel' in obj else '')")"
config_tools_source="$(python -c "import json,codecs;obj=json.load(codecs.open('$config_file', 'r', 'utf-8-sig'));print(obj['toolsSource'] if 'toolsSource' in obj else '')")"
else
__warn "$config_file is invalid JSON. Its settings will be ignored."
fi
else
__warn 'Missing required command: jq or pyton. Could not parse the JSON file. Its settings will be ignored.'
fi
[ ! -z "${config_channel:-}" ] && channel="$config_channel"
[ ! -z "${config_tools_source:-}" ] && tools_source="$config_tools_source"
fi
[ -z "$channel" ] && channel='dev'
[ -z "$tools_source" ] && tools_source='https://aspnetcore.blob.core.windows.net/buildtools'
get_korebuild
set_korebuildsettings "$tools_source" "$DOTNET_HOME" "$repo_path" "$config_file" "$ci"
invoke_korebuild_command "$command" "$@"

View File

@ -5,6 +5,7 @@
<IncludeBuildOutput>false</IncludeBuildOutput>
<NoPackageAnalysis>true</NoPackageAnalysis>
<GenerateDocumentationFile>false</GenerateDocumentationFile>
<Description>Roslyn analyzers for ASP.NET Core Components.</Description>
</PropertyGroup>
<ItemGroup>
@ -14,6 +15,7 @@
<ItemGroup>
<None Include="$(TargetPath)" Pack="true" PackagePath="analyzers/dotnet/cs" Visible="false" />
<SignedPackageFile Include="$(TargetPath)" Certificate="3PartySHA2" />
</ItemGroup>
<ItemGroup>

View File

@ -2,11 +2,12 @@
<PropertyGroup>
<TargetFramework>netcoreapp2.1</TargetFramework>
<Description>JavaScript runtime files needed for ASP.NET Core Components browser rendering.</Description>
<TypeScriptCompileBlocked>true</TypeScriptCompileBlocked>
<TypeScriptToolsVersion>Latest</TypeScriptToolsVersion>
<DefaultItemExcludes>${DefaultItemExcludes};node_modules\**</DefaultItemExcludes>
<IsPackable>false</IsPackable>
<!-- VS's FastUpToDateCheck doesn't consider .ts file changes, so it's necessary to disable it to get incremental builds to work correctly (albeit not as fast as if FastUpToDateCheck did work for them) -->
<DisableFastUpToDateCheck>true</DisableFastUpToDateCheck>
</PropertyGroup>

View File

@ -2,6 +2,7 @@
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<Description>Support for rendering ASP.NET Core components in browsers.</Description>
</PropertyGroup>
<ItemGroup>

View File

@ -2,6 +2,7 @@
<PropertyGroup>
<TargetFrameworks>netcoreapp2.1</TargetFrameworks>
<Description>Build mechanism for ASP.NET Core Components.</Description>
<OutputType>Exe</OutputType>
<CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>
</PropertyGroup>
@ -10,10 +11,16 @@
<PropertyGroup>
<NoPackageAnalysis>true</NoPackageAnalysis>
<NuspecFile>Microsoft.AspNetCore.Components.Build.nuspec</NuspecFile>
<IntermediatePackDir>$(OutputPath)publish\</IntermediatePackDir>
<IntermediatePackDir>obj\publish\</IntermediatePackDir>
<PublishDir>$(IntermediatePackDir)$(TargetFramework)/</PublishDir>
</PropertyGroup>
<ItemGroup>
<SignedPackageFile Include="$(PublishDir)\**\Microsoft.AspNetCore.Components.Build.exe" Certificate="3PartySHA2" />
<ExcludePackageFileFromSigning Include="$(PublishDir)\**\*.dll" Exclude="$(PublishDir)\**\Microsoft.AspNetCore.Components.dll;$(PublishDir)\**\Microsoft.AspNetCore.Components.Razor.Extensions.dll;" />
<ExcludePackageFileFromSigning Include="..\Microsoft.AspNetCore.Components.Browser.JS\dist\blazor.*.js" />
</ItemGroup>
<!-- Executes /t:Publish for all target frameworks before packing-->
<Target Name="PublishAll" BeforeTargets="_IntermediatePack">
<PropertyGroup>
@ -22,7 +29,8 @@
version=$(PackageVersion);
publishDir=$([MSBuild]::NormalizeDirectory($(IntermediatePackDir)));
razorversion=$(MicrosoftAspNetCoreRazorDesignPackageVersion);
blazormonoversion=$(MicrosoftAspNetCoreBlazorMonoPackageVersion);</NuspecProperties>
blazormonoversion=$(MicrosoftAspNetCoreBlazorMonoPackageVersion);
repositorycommit=$(RepositoryCommit);</NuspecProperties>
</PropertyGroup>
<ItemGroup>
<_TargetFramework Include="$(TargetFrameworks)" />
@ -30,14 +38,6 @@
<MSBuild Projects="$(MSBuildProjectFullPath)" Targets="Publish" Properties="TargetFramework=%(_TargetFramework.Identity)" />
</Target>
<ItemGroup>
<!-- This is a newer version than is in the shared framework, so copy it -->
<Content Include="$(ArtifactsBinDir)Microsoft.AspNetCore.Components.Razor.Extensions\netstandard2.0\Microsoft.AspNetCore.Razor.Language.dll">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
<Visible>false</Visible>
</Content>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Microsoft.AspNetCore.Components.Browser.JS\Microsoft.AspNetCore.Components.Browser.JS.csproj" />
<ProjectReference Include="..\Microsoft.AspNetCore.Components.Razor.Extensions\Microsoft.AspNetCore.Components.Razor.Extensions.csproj" />

View File

@ -5,10 +5,13 @@
<version>$version$</version>
<authors>Microsoft</authors>
<copyright>© Microsoft Corporation. All rights reserved.</copyright>
<description>Build mechanism for Blazor applications.</description>
<description>Build mechanism for ASP.NET Core Components.</description>
<tags>aspnet components</tags>
<iconUrl>https://go.microsoft.com/fwlink/?LinkID=288859</iconUrl>
<licenseUrl>https://raw.githubusercontent.com/aspnet/Home/2.0.0/LICENSE.txt</licenseUrl>
<projectUrl>https://asp.net/</projectUrl>
<repository type="git" url="https://github.com/aspnet/Blazor" />
<repository type="git" url="https://github.com/aspnet/aspnetcore" commit="$repositorycommit$" />
<requireLicenseAcceptance>true</requireLicenseAcceptance>
<dependencies>
<dependency id="Microsoft.AspNetCore.Razor.Design" version="$razorversion$" include="all" />
<dependency id="Microsoft.AspNetCore.Components.Analyzers" version="$version$" include="all" />

View File

@ -4,7 +4,8 @@
<TargetFrameworks>netstandard2.0</TargetFrameworks>
<TargetFrameworks Condition="'$(OS)' == 'Windows_NT'">$(TargetFrameworks);net461</TargetFrameworks>
<RootNamespace>Microsoft.AspNetCore.Components.Razor</RootNamespace>
<Description>Extensions to the Razor compiler to support building Razor Components.</Description>
<!-- Copy package references to output, needed so the build project can find them -->
<CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>
</PropertyGroup>

View File

@ -2,6 +2,7 @@
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<Description>Runtime server features for ASP.NET Core Components.</Description>
</PropertyGroup>
<ItemGroup>

View File

@ -3,7 +3,8 @@
<!-- This assembly ships in Components.Build -->
<PropertyGroup>
<TargetFramework>netstandard1.0</TargetFramework>
<IsPackable>false</IsPackable>
<IsPackable>false</IsPackable>
<Description>Workaround for a temporary Razor compiler issue needed by ASP.NET Core Components.</Description>
</PropertyGroup>
</Project>

View File

@ -2,6 +2,7 @@
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<Description>Components feature for ASP.NET Core.</Description>
</PropertyGroup>
<ItemGroup>