Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Por Rick Anderson
Razor vistas, páginas, controladores, modelos de página Razor componentes, componentes de exibição, e modelos de dados podem ser criados numa biblioteca de classes Razor (RCL). O RCL pode ser embalado e reutilizado. As aplicações podem incluir a RCL e substituir as visualizações e páginas que contêm. Quando uma vista, vista parcial ou Página Razor é encontrada na aplicação web e na RCL, a marcação Razor (ficheiro .cshtml) na aplicação web tem precedência.
Para obter informações sobre como integrar npm e webpack no processo de compilação de uma RCL, consulte Build client web assets for your Razor Class Library.
Criar uma biblioteca de classes contendo a interface de usuário Razor
- No Visual Studio, selecione Criar um novo projeto.
- Selecione Razor Biblioteca de Classes>Próximo.
- Nomeie a biblioteca (por exemplo, "RazorClassLib") >Crie. Para evitar uma colisão de nome de arquivo com a biblioteca de exibição gerada, verifique se o nome da biblioteca não termina em
.Views. - Selecione páginas e exibições de suporte se precisar que a biblioteca contenha páginas e/ou exibições. Por padrão, apenas Razor componentes são suportados. Selecione Criar.
O modelo Biblioteca de Classes Razor assume o desenvolvimento de componentes Razor como padrão. A opção páginas e visualizações de suporte suporta páginas e visualizações. Para mais informações sobre o suporte para bibliotecas de componentes reutilizáveis (RCL) no Blazor, consulte e aprenda a consumir componentes ASP.NET Core Razor a partir de uma biblioteca de classes Razor (RCL).
Adicione Razor arquivos à RCL.
Os modelos ASP.NET Core assumem que o conteúdo RCL está na pasta Areas. Veja o layout de Páginas RCL abaixo para criar uma RCL que exponha conteúdo em ~/Pages em vez de ~/Areas/Pages.
Conteúdo RCL de referência
O RCL pode ser referenciado por:
- Pacote NuGet. Consulte Criação de pacotes NuGet e dotnet adicionar pacote e Criar e publicar um pacote NuGet.
-
{ProjectName}.csproj. Veja dotnet-add referência.
Sobrescrever vistas, vistas parciais e páginas
Quando uma vista, vista parcial ou Página Razor é encontrada na aplicação web e na RCL, a marcação Razor (ficheiro .cshtml) na aplicação web tem precedência. Por exemplo, adicione WebApp1/Areas/MyFeature/Pages/Page1.cshtml ao WebApp1 e Page1 no WebApp1 terá precedência sobre Page1 na RCL.
No download de exemplo, renomeie WebApp1/Areas/MyFeature2 para WebApp1/Areas/MyFeature para testar a precedência.
Copiar a visualização parcial RazorUIClassLib/Areas/MyFeature/Pages/Shared/_Message.cshtml para WebApp1/Areas/MyFeature/Pages/Shared/_Message.cshtml. Atualize as marcações para indicar o novo local. Construa e execute a aplicação para verificar se está a ser utilizada a versão fragmentada da aplicação.
Se a RCL utilizar os Razor Pages, ative os serviços e pontos finais do Razor Pages na aplicação anfitriã.
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllersWithViews();
builder.Services.AddRazorPages();
var app = builder.Build();
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Home/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
app.MapRazorPages();
app.Run();
Layout de páginas RCL
Para fazer referência ao conteúdo RCL como se fizesse parte da pasta Pages da aplicação Web, crie o projeto RCL com a seguinte estrutura de ficheiros:
RazorUIClassLib/PagesRazorUIClassLib/Pages/Shared
Suponha que RazorUIClassLib/Pages/Shared contém dois arquivos parciais: _Header.cshtml e _Footer.cshtml. As <partial> tags podem ser adicionadas ao _Layout.cshtml arquivo:
<body>
<partial name="_Header">
@RenderBody()
<partial name="_Footer">
</body>
Adicione o ficheiro _ViewStart.cshtml à pasta Pages do projeto RCL para utilizar o ficheiro _Layout.cshtml da aplicação Web anfitrião:
@{
Layout = "_Layout";
}
Criar um RCL com ativos estáticos
Uma RCL pode exigir ativos estáticos complementares que podem ser referenciados pela RCL ou pela aplicação consumidora da RCL. ASP.NET Core permite criar RCLs que incluem ativos estáticos que estão disponíveis para um aplicativo consumidor.
Para incluir ativos complementares como parte de uma RCL, crie uma pasta wwwroot na biblioteca de classes e inclua todos os arquivos necessários nessa pasta.
Ao embalar um RCL, todos os ativos complementares na pasta wwwroot são automaticamente incluídos no pacote.
Use o comando dotnet pack em vez da versão NuGet.exe nuget pack.
Adicionar ativos da Web do cliente ao processo de compilação
A integração dos ativos web do cliente no pipeline de compilação não é uma tarefa trivial. Consulte Desenvolver ativos Web de cliente para Razor a sua Biblioteca de Classes para mais informações.
Excluir ativos estáticos
Para excluir ativos estáticos, adicione o caminho de exclusão desejado ao grupo de propriedades $(DefaultItemExcludes) no arquivo de projeto. Separe as entradas com ponto e vírgula (;).
No exemplo a seguir, a folha de estilo lib.css na pasta wwwroot não é considerada um ativo estático e não está incluída na RCL publicada:
<PropertyGroup>
<DefaultItemExcludes>$(DefaultItemExcludes);wwwroot\lib.css</DefaultItemExcludes>
</PropertyGroup>
Integração Typescript
Para incluir ficheiros TypeScript numa RCL:
Faça referência ao pacote NuGet
Microsoft.TypeScript.MSBuildno projeto.Note
Para obter orientação sobre como adicionar pacotes a aplicações .NET, consulte os artigos em Instalar e gerir pacotes no fluxo de trabalho de consumo de pacotes (documentação do NuGet). Confirme as versões corretas do pacote em NuGet.org.
Coloque os arquivos TypeScript (
.ts) fora da pastawwwroot. Por exemplo, coloque os arquivos em uma pastaClient.Adicione a seguinte marcação ao arquivo de projeto:
- Configure o resultado da compilação TypeScript para a pasta
wwwrootcom a propriedadeTypescriptOutDir. - Inclua o destino TypeScript como uma dependência do destino
PrepareForBuildDependsOn. - Remova a saída no
wwwroot folder.
- Configure o resultado da compilação TypeScript para a pasta
<Project Sdk="Microsoft.NET.Sdk.Razor">
<PropertyGroup>
// Markup removed for brevity.
<TypescriptOutDir>wwwroot</TypescriptOutDir>
<PrepareForBuildDependsOn>
CompileTypeScriptWithTSConfig;
GetTypeScriptOutputForPublishing;$(PrepareForBuildDependsOn)
</PrepareForBuildDependsOn>
</PropertyGroup>
<ItemGroup>
<Content Remove="wwwroot\{path-to-typescript-outputs}" />
</ItemGroup>
</Project>
Consumir conteúdo a partir de uma RCL referenciada
Os ficheiros incluídos na pasta wwwroot da RCL são expostos à RCL ou à aplicação consumidora sob o prefixo _content/{PACKAGE ID}/. Por exemplo, uma biblioteca com um nome de assembly de Razor.Class.Lib e sem um <PackageId> especificado no seu ficheiro de projeto resulta num caminho para o conteúdo estático em _content/Razor.Class.Lib/. Durante a produção de um pacote NuGet, se o nome do assembly não for o mesmo que o ID do pacote (<PackageId> no ficheiro de projeto da biblioteca), use o ID do pacote conforme especificado no ficheiro de projeto para {PACKAGE ID}.
O aplicativo de consumo faz referência a ativos estáticos fornecidos pela biblioteca com <script>, <style>, <img>e outras tags HTML. O aplicativo de consumo deve ter suporte a arquivos estáticos habilitado em:
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllersWithViews();
builder.Services.AddRazorPages();
var app = builder.Build();
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Home/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
app.MapRazorPages();
app.Run();
Ao executar a app de consumo a partir da saída de compilação (dotnet run), os ativos web estáticos são habilitados por padrão no ambiente de Desenvolvimento. Para oferecer suporte a recursos em outros ambientes ao executar a partir da saída de compilação, chame UseStaticWebAssets no construtor de host em Program.cs:
var builder = WebApplication.CreateBuilder(args);
builder.WebHost.UseWebRoot("wwwroot");
builder.WebHost.UseStaticWebAssets();
builder.Services.AddRazorPages();
var app = builder.Build();
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.MapRazorPages();
app.Run();
Chamar UseStaticWebAssets não é necessário ao executar um aplicativo a partir da saída publicada (dotnet publish).
Fluxo de desenvolvimento multi-projeto
Quando a aplicação de consumo entra em execução:
- Os ativos na RCL permanecem em suas pastas originais. Os ativos não são movidos para o aplicativo de consumo.
- Qualquer alteração dentro da pasta
wwwrootda RCL é refletida na aplicação consumidora depois de a RCL ser reconstruída e sem reconstruir a aplicação consumidora.
Quando o RCL é construído, é produzido um manifesto que descreve os locais dos ativos Web estáticos. A aplicação consumidora lê o manifesto durante a execução para consumir os recursos de projetos e pacotes referenciados. Quando um novo ativo é adicionado a uma RCL, a RCL deve ser reconstruída para atualizar seu manifesto antes que um aplicativo consumidor possa acessar o novo ativo.
Publish
Quando a aplicação é publicada, os ativos complementares de todos os projetos e pacotes referenciados são copiados para a pasta wwwroot da aplicação publicada sob _content/{PACKAGE ID}/. Quando estiver a produzir um pacote NuGet e o nome do assembly não for o mesmo que o ID do pacote (<PackageId> no ficheiro de projeto da biblioteca), utilize o ID do pacote conforme especificado no ficheiro de projeto para {PACKAGE ID}, ao examinar a pasta wwwroot para os ativos publicados.
Recursos adicionais
Razor vistas, páginas, controladores, modelos de página Razor componentes, componentes de exibição, e modelos de dados podem ser criados numa biblioteca de classes Razor (RCL). O RCL pode ser embalado e reutilizado. As aplicações podem incluir a RCL e substituir as visualizações e páginas que contêm. Quando uma vista, vista parcial ou Página Razor é encontrada na aplicação web e na RCL, a marcação Razor (ficheiro .cshtml) na aplicação web tem precedência.
Para obter informações sobre como integrar npm e webpack no processo de compilação de uma Biblioteca de Classes Razor, consulte Construir recursos web do cliente para a sua Biblioteca de Classes Razor.
Criar uma biblioteca de classes contendo a interface de usuário Razor
- No Visual Studio, selecione Criar um novo projeto.
- Selecione Razor Biblioteca de Classes>Próximo.
- Nomeie a biblioteca (por exemplo, "RazorClassLib") >Crie. Para evitar uma colisão de nome de arquivo com a biblioteca de exibição gerada, verifique se o nome da biblioteca não termina em
.Views. - Selecione suporte a páginas e modos de exibição se precisar oferecer suporte a modos de exibição. Por padrão, apenas Razor páginas são suportadas. Selecione Criar.
O modelo RCL (Biblioteca de Classes Razor) assume por padrão o desenvolvimento de componentes Razor. A opção páginas e visualizações de suporte suporta páginas e visualizações.
Adicione Razor arquivos à RCL.
Os modelos ASP.NET Core assumem que o conteúdo RCL está na pasta Areas. Veja o layout de Páginas RCL abaixo para criar uma RCL que exponha conteúdo em ~/Pages em vez de ~/Areas/Pages.
Conteúdo RCL de referência
O RCL pode ser referenciado por:
- Pacote NuGet. Consulte Criação de pacotes NuGet e dotnet adicionar pacote e Criar e publicar um pacote NuGet.
-
{ProjectName}.csproj. Veja dotnet-add referência.
Sobrescrever vistas, vistas parciais e páginas
Quando uma vista, vista parcial ou Página Razor é encontrada na aplicação web e na RCL, a marcação Razor (ficheiro .cshtml) na aplicação web tem precedência. Por exemplo, adicione WebApp1/Areas/MyFeature/Pages/Page1.cshtml ao WebApp1 e Page1 no WebApp1 terá precedência sobre Page1 na RCL.
No download de exemplo, renomeie WebApp1/Areas/MyFeature2 para WebApp1/Areas/MyFeature para testar a precedência.
Copiar a visualização parcial RazorUIClassLib/Areas/MyFeature/Pages/Shared/_Message.cshtml para WebApp1/Areas/MyFeature/Pages/Shared/_Message.cshtml. Atualize as marcações para indicar o novo local. Construa e execute a aplicação para verificar se está a ser utilizada a versão fragmentada da aplicação.
Se a RCL utilizar os Razor Pages, ative os serviços e pontos finais do Razor Pages na aplicação anfitriã.
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllersWithViews();
builder.Services.AddRazorPages();
var app = builder.Build();
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Home/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
app.MapRazorPages();
app.Run();
Layout de páginas RCL
Para fazer referência ao conteúdo RCL como se fizesse parte da pasta Pages da aplicação Web, crie o projeto RCL com a seguinte estrutura de ficheiros:
RazorUIClassLib/PagesRazorUIClassLib/Pages/Shared
Suponha que RazorUIClassLib/Pages/Shared contém dois arquivos parciais: _Header.cshtml e _Footer.cshtml. As <partial> tags podem ser adicionadas ao _Layout.cshtml arquivo:
<body>
<partial name="_Header">
@RenderBody()
<partial name="_Footer">
</body>
Adicione o ficheiro _ViewStart.cshtml à pasta Pages do projeto RCL para utilizar o ficheiro _Layout.cshtml da aplicação Web anfitrião:
@{
Layout = "_Layout";
}
Criar um RCL com ativos estáticos
Uma RCL pode exigir ativos estáticos complementares que podem ser referenciados pela RCL ou pela aplicação consumidora da RCL. ASP.NET Core permite criar RCLs que incluem ativos estáticos que estão disponíveis para um aplicativo consumidor.
Para incluir ativos complementares como parte de uma RCL, crie uma pasta wwwroot na biblioteca de classes e inclua todos os arquivos necessários nessa pasta.
Ao embalar um RCL, todos os ativos complementares na pasta wwwroot são automaticamente incluídos no pacote.
Use o comando dotnet pack em vez da versão NuGet.exe nuget pack.
Excluir ativos estáticos
Para excluir ativos estáticos, adicione o caminho de exclusão desejado ao grupo de propriedades $(DefaultItemExcludes) no arquivo de projeto. Separe as entradas com ponto e vírgula (;).
No exemplo a seguir, a folha de estilo lib.css na pasta wwwroot não é considerada um ativo estático e não está incluída na RCL publicada:
<PropertyGroup>
<DefaultItemExcludes>$(DefaultItemExcludes);wwwroot\lib.css</DefaultItemExcludes>
</PropertyGroup>
Integração Typescript
Para incluir ficheiros TypeScript numa RCL:
Faça referência ao pacote NuGet
Microsoft.TypeScript.MSBuildno projeto.Note
Para obter orientação sobre como adicionar pacotes a aplicações .NET, consulte os artigos em Instalar e gerir pacotes no fluxo de trabalho de consumo de pacotes (documentação do NuGet). Confirme as versões corretas do pacote em NuGet.org.
Coloque os arquivos TypeScript (
.ts) fora da pastawwwroot. Por exemplo, coloque os arquivos em uma pastaClient.Configure o resultado de compilação do TypeScript para a pasta
wwwroot. Defina a propriedadeTypescriptOutDirdentro de umPropertyGroupno arquivo de projeto:<TypescriptOutDir>wwwroot</TypescriptOutDir>Inclua o destino TypeScript como uma dependência do destino
PrepareForBuildDependsOnadicionando o seguinte destino dentro de umPropertyGroupno arquivo de projeto:<PrepareForBuildDependsOn> CompileTypeScript; GetTypeScriptOutputForPublishing;$(PrepareForBuildDependsOn) </PrepareForBuildDependsOn>
Consumir conteúdo a partir de uma RCL referenciada
Os ficheiros incluídos na pasta wwwroot da RCL são expostos à RCL ou à aplicação consumidora sob o prefixo _content/{PACKAGE ID}/. Por exemplo, uma biblioteca com um nome de assembly de Razor.Class.Lib e sem um <PackageId> especificado no seu ficheiro de projeto resulta num caminho para o conteúdo estático em _content/Razor.Class.Lib/. Durante a produção de um pacote NuGet, se o nome do assembly não for o mesmo que o ID do pacote (<PackageId> no ficheiro de projeto da biblioteca), use o ID do pacote conforme especificado no ficheiro de projeto para {PACKAGE ID}.
O aplicativo de consumo faz referência a ativos estáticos fornecidos pela biblioteca com <script>, <style>, <img>e outras tags HTML. O aplicativo de consumo deve ter suporte a arquivos estáticos habilitado em:
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllersWithViews();
builder.Services.AddRazorPages();
var app = builder.Build();
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Home/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
app.MapRazorPages();
app.Run();
Ao executar a app de consumo a partir da saída de compilação (dotnet run), os ativos web estáticos são habilitados por padrão no ambiente de Desenvolvimento. Para oferecer suporte a recursos em outros ambientes ao executar a partir da saída de compilação, chame UseStaticWebAssets no construtor de host em Program.cs:
var builder = WebApplication.CreateBuilder(args);
builder.WebHost.UseWebRoot("wwwroot").UseStaticWebAssets();
builder.Services.AddRazorPages();
var app = builder.Build();
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.MapRazorPages();
app.Run();
Nota: .NET 6 requer apenas chamar builder.WebHost.UseWebRoot("wwwroot").UseStaticWebAssets. Para obter mais informações, consulte o problema do GitHub
Chamar UseStaticWebAssets não é necessário ao executar um aplicativo a partir da saída publicada (dotnet publish).
Fluxo de desenvolvimento multi-projeto
Quando a aplicação de consumo entra em execução:
- Os ativos na RCL permanecem em suas pastas originais. Os ativos não são movidos para o aplicativo de consumo.
- Qualquer alteração dentro da pasta
wwwrootda RCL é refletida na aplicação consumidora depois de a RCL ser reconstruída e sem reconstruir a aplicação consumidora.
Quando o RCL é construído, é produzido um manifesto que descreve os locais dos ativos Web estáticos. A aplicação consumidora lê o manifesto durante a execução para consumir os recursos de projetos e pacotes referenciados. Quando um novo ativo é adicionado a uma RCL, a RCL deve ser reconstruída para atualizar seu manifesto antes que um aplicativo consumidor possa acessar o novo ativo.
Publish
Quando a aplicação é publicada, os ativos complementares de todos os projetos e pacotes referenciados são copiados para a pasta wwwroot da aplicação publicada sob _content/{PACKAGE ID}/. Quando estiver a produzir um pacote NuGet e o nome do assembly não for o mesmo que o ID do pacote (<PackageId> no ficheiro de projeto da biblioteca), utilize o ID do pacote conforme especificado no ficheiro de projeto para {PACKAGE ID}, ao examinar a pasta wwwroot para os ativos publicados.
Recursos adicionais
Razor vistas, páginas, controladores, modelos de página Razor componentes, componentes de exibição, e modelos de dados podem ser criados numa biblioteca de classes Razor (RCL). O RCL pode ser embalado e reutilizado. As aplicações podem incluir a RCL e substituir as visualizações e páginas que contêm. Quando uma vista, vista parcial ou Página Razor é encontrada na aplicação web e na RCL, a marcação Razor (ficheiro .cshtml) na aplicação web tem precedência.
Visualizar ou baixar código de exemplo (como descarregar)
Criar uma biblioteca de classes contendo a interface de usuário Razor
- No Visual Studio, selecione Criar um novo projeto.
- Selecione Razor Biblioteca de Classes>Próximo.
- Nomeie a biblioteca (por exemplo, "RazorClassLib") >Create>Next. Para evitar uma colisão de nome de arquivo com a biblioteca de exibição gerada, verifique se o nome da biblioteca não termina em
.Views. - Selecione o Target Framework. Verifique ☑ páginas de suporte e visualizações para oferecer suporte a visualizações. Por padrão, apenas Razor componentes são suportados. Selecione Criar.
O modelo de biblioteca de classes Razor (RCL) define como padrão o desenvolvimento de componentes Razor. A opção páginas e visualizações de suporte suporta páginas e visualizações.
Adicione Razor arquivos à RCL.
Os modelos ASP.NET Core assumem que o conteúdo RCL está na pasta Areas. Consulte o esquema de Páginas RCL em para criar uma RCL que exponha conteúdo em ~/Pages em detrimento de ~/Areas/Pages.
Conteúdo RCL de referência
O RCL pode ser referenciado por:
- Pacote NuGet. Consulte Criação de pacotes NuGet e dotnet adicionar pacote e Criar e publicar um pacote NuGet.
-
{ProjectName}.csproj. Veja dotnet-add referência.
Sobrescrever vistas, vistas parciais e páginas
Quando uma vista, vista parcial ou Página Razor é encontrada na aplicação web e na RCL, a marcação Razor (ficheiro .cshtml) na aplicação web tem precedência. Por exemplo, adicione WebApp1/Areas/MyFeature/Pages/Page1.cshtml ao WebApp1 e Page1 no WebApp1 terá precedência sobre Page1 na RCL.
No download de exemplo, renomeie WebApp1/Areas/MyFeature2 para WebApp1/Areas/MyFeature para testar a precedência.
Copiar a visualização parcial RazorUIClassLib/Areas/MyFeature/Pages/Shared/_Message.cshtml para WebApp1/Areas/MyFeature/Pages/Shared/_Message.cshtml. Atualize as marcações para indicar o novo local. Construa e execute a aplicação para verificar se está a ser utilizada a versão fragmentada da aplicação.
Layout de páginas RCL
Para fazer referência ao conteúdo RCL como se fizesse parte da pasta Pages da aplicação Web, crie o projeto RCL com a seguinte estrutura de ficheiros:
RazorUIClassLib/PagesRazorUIClassLib/Pages/Shared
Suponha que RazorUIClassLib/Pages/Shared contém dois arquivos parciais: _Header.cshtml e _Footer.cshtml. As <partial> tags podem ser adicionadas ao _Layout.cshtml arquivo:
<body>
<partial name="_Header">
@RenderBody()
<partial name="_Footer">
</body>
Adicione o ficheiro _ViewStart.cshtml à pasta Pages do projeto RCL para utilizar o ficheiro _Layout.cshtml da aplicação Web anfitrião:
@{
Layout = "_Layout";
}
Criar um RCL com ativos estáticos
Uma RCL pode exigir ativos estáticos complementares que podem ser referenciados pela RCL ou pela aplicação consumidora da RCL. ASP.NET Core permite criar RCLs que incluem ativos estáticos que estão disponíveis para um aplicativo consumidor.
Para incluir ativos complementares como parte de uma RCL, crie uma pasta wwwroot na biblioteca de classes e inclua todos os arquivos necessários nessa pasta.
Ao embalar um RCL, todos os ativos complementares na pasta wwwroot são automaticamente incluídos no pacote.
Use o comando dotnet pack em vez da versão NuGet.exe nuget pack.
Excluir ativos estáticos
Para excluir ativos estáticos, adicione o caminho de exclusão desejado ao grupo de propriedades $(DefaultItemExcludes) no arquivo de projeto. Separe as entradas com ponto e vírgula (;).
No exemplo a seguir, a folha de estilo lib.css na pasta wwwroot não é considerada um ativo estático e não está incluída na RCL publicada:
<PropertyGroup>
<DefaultItemExcludes>$(DefaultItemExcludes);wwwroot\lib.css</DefaultItemExcludes>
</PropertyGroup>
Integração Typescript
Para incluir ficheiros TypeScript numa RCL:
Faça referência ao pacote NuGet
Microsoft.TypeScript.MSBuildno projeto.Note
Para obter orientação sobre como adicionar pacotes a aplicações .NET, consulte os artigos em Instalar e gerir pacotes no fluxo de trabalho de consumo de pacotes (documentação do NuGet). Confirme as versões corretas do pacote em NuGet.org.
Coloque os arquivos TypeScript (
.ts) fora da pastawwwroot. Por exemplo, coloque os arquivos em uma pastaClient.Configure o resultado de compilação do TypeScript para a pasta
wwwroot. Defina a propriedadeTypescriptOutDirdentro de umPropertyGroupno arquivo de projeto:<TypescriptOutDir>wwwroot</TypescriptOutDir>Inclua o destino TypeScript como uma dependência do destino
ResolveCurrentProjectStaticWebAssetsadicionando o seguinte destino dentro de umPropertyGroupno arquivo de projeto:<ResolveCurrentProjectStaticWebAssetsInputsDependsOn> CompileTypeScript; $(ResolveCurrentProjectStaticWebAssetsInputs) </ResolveCurrentProjectStaticWebAssetsInputsDependsOn>
Consumir conteúdo a partir de uma RCL referenciada
Os ficheiros incluídos na pasta wwwroot da RCL são expostos à RCL ou à aplicação consumidora sob o prefixo _content/{PACKAGE ID}/. Por exemplo, uma biblioteca com um nome de assembly de Razor.Class.Lib e sem um <PackageId> especificado no seu ficheiro de projeto resulta num caminho para o conteúdo estático em _content/Razor.Class.Lib/. Durante a produção de um pacote NuGet, se o nome do assembly não for o mesmo que o ID do pacote (<PackageId> no ficheiro de projeto da biblioteca), use o ID do pacote conforme especificado no ficheiro de projeto para {PACKAGE ID}.
O aplicativo de consumo faz referência a ativos estáticos fornecidos pela biblioteca com <script>, <style>, <img>e outras tags HTML. O aplicativo de consumo deve ter suporte a arquivos estáticos habilitado em Startup.Configure:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
...
app.UseStaticFiles();
...
}
Ao executar a app de consumo a partir da saída de compilação (dotnet run), os ativos web estáticos são habilitados por padrão no ambiente de Desenvolvimento. Para oferecer suporte a recursos em outros ambientes ao executar a partir da saída de compilação, chame UseStaticWebAssets no construtor de host em Program.cs:
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Hosting;
public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStaticWebAssets();
webBuilder.UseStartup<Startup>();
});
}
Chamar UseStaticWebAssets não é necessário ao executar um aplicativo a partir da saída publicada (dotnet publish).
Fluxo de desenvolvimento multi-projeto
Quando a aplicação de consumo entra em execução:
- Os ativos na RCL permanecem em suas pastas originais. Os ativos não são movidos para o aplicativo de consumo.
- Qualquer alteração dentro da pasta
wwwrootda RCL é refletida na aplicação consumidora depois de a RCL ser reconstruída e sem reconstruir a aplicação consumidora.
Quando o RCL é construído, é produzido um manifesto que descreve os locais dos ativos Web estáticos. A aplicação consumidora lê o manifesto durante a execução para consumir os recursos de projetos e pacotes referenciados. Quando um novo ativo é adicionado a uma RCL, a RCL deve ser reconstruída para atualizar seu manifesto antes que um aplicativo consumidor possa acessar o novo ativo.
Publish
Quando a aplicação é publicada, os ativos complementares de todos os projetos e pacotes referenciados são copiados para a pasta wwwroot da aplicação publicada sob _content/{PACKAGE ID}/. Quando estiver a produzir um pacote NuGet e o nome do assembly não for o mesmo que o ID do pacote (<PackageId> no ficheiro de projeto da biblioteca), utilize o ID do pacote conforme especificado no ficheiro de projeto para {PACKAGE ID}, ao examinar a pasta wwwroot para os ativos publicados.
Recursos adicionais
Razor vistas, páginas, controladores, modelos de página Razor componentes, componentes de exibição, e modelos de dados podem ser criados numa biblioteca de classes Razor (RCL). O RCL pode ser embalado e reutilizado. As aplicações podem incluir a RCL e substituir as visualizações e páginas que contêm. Quando uma vista, vista parcial ou Página Razor é encontrada na aplicação web e na RCL, a marcação Razor (ficheiro .cshtml) na aplicação web tem precedência.
Visualizar ou baixar código de exemplo (como descarregar)
Criar uma biblioteca de classes contendo a interface de usuário Razor
- No menu Visual Studio Ficheiro, selecione Novo>Projeto.
- Selecione Aplicação Web ASP.NET Core.
- Nomeie a biblioteca (por exemplo, "RazorClassLib") >OK. Para evitar uma colisão de nome de arquivo com a biblioteca de exibição gerada, verifique se o nome da biblioteca não termina em
.Views. - Verifique se ASP.NET Core 2.1 ou posterior está selecionado.
- Selecione Razor Biblioteca de Classes>OK.
Um RCL tem o seguinte ficheiro de projeto:
<Project Sdk="Microsoft.NET.Sdk.Razor">
<PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework>
<AddRazorSupportForMvc>true</AddRazorSupportForMvc>
</PropertyGroup>
<ItemGroup>
<FrameworkReference Include="Microsoft.AspNetCore.App" />
</ItemGroup>
</Project>
Adicione Razor arquivos à RCL.
Os modelos ASP.NET Core assumem que o conteúdo RCL está na pasta Areas. Consulte o esquema de Páginas RCL em para criar uma RCL que exponha conteúdo em ~/Pages em detrimento de ~/Areas/Pages.
Conteúdo RCL de referência
O RCL pode ser referenciado por:
- Pacote NuGet. Consulte Criação de pacotes NuGet e dotnet adicionar pacote e Criar e publicar um pacote NuGet.
-
{ProjectName}.csproj. Veja dotnet-add referência.
Guia passo a passo: Criar um projeto RCL e utilizar a partir de um projeto Razor Pages
Você pode baixar o projeto completo e testá-lo em vez de criá-lo. O download de exemplo contém código adicional e links que tornam o projeto fácil de testar. Você pode deixar feedback em esta questão do GitHub com os seus comentários sobre amostras de download versus instruções passo a passo.
Testar o aplicativo de download
Se você não baixou o aplicativo concluído e prefere criar o projeto passo a passo, pule para a próxima seção .
Abra o arquivo .sln no Visual Studio. Execute o aplicativo.
Siga as instruções em Test WebApp1
Criar uma RCL
Nesta seção, é criada uma RCL. Os ficheiros Razor são adicionados à RCL.
Crie o projeto RCL:
- No menu Visual Studio Ficheiro, selecione Novo>Projeto.
- Selecione Aplicação Web ASP.NET Core.
- Nomeie o aplicativo RazorUIClassLib>OK.
- Verifique se ASP.NET Core 2.1 ou posterior está selecionado.
- Selecione Razor Biblioteca de Classes>OK.
- Adicione um arquivo de exibição parcial Razor chamado
RazorUIClassLib/Areas/MyFeature/Pages/Shared/_Message.cshtml.
Adicionar Razor arquivos e pastas ao projeto
Substitua a marcação no
RazorUIClassLib/Areas/MyFeature/Pages/Shared/_Message.cshtmlpelo seguinte código:<h3>_Message.cshtml partial view.</h3> <p>RazorUIClassLib\Areas\MyFeature\Pages\Shared\_Message.cshtml</p>Substitua a marcação no
RazorUIClassLib/Areas/MyFeature/Pages/Page1.cshtmlpelo seguinte código:@page @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers <h2>Hello from a Razor UI class library!</h2> <p> From RazorUIClassLib\Areas\MyFeature\Pages\Page1.cshtml</p> <partial name="_Message" />É necessário utilizar
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelperspara a visualização parcial (<partial name="_Message" />). Em vez de incluir a diretiva@addTagHelper, você pode adicionar um arquivo_ViewImports.cshtml. Por exemplo:dotnet new viewimports -o RazorUIClassLib/Areas/MyFeature/PagesPara obter mais informações sobre
_ViewImports.cshtml, consulte Importando diretivas compartilhadasCrie a biblioteca de classes para verificar se não há erros do compilador:
dotnet build RazorUIClassLib
A saída de compilação contém RazorUIClassLib.dll e RazorUIClassLib.Views.dll.
RazorUIClassLib.Views.dll contém o conteúdo Razor compilado.
Utilizar a biblioteca de IU do Razor num projeto do Razor Pages
Crie a aplicação web Razor Pages:
No Gerenciador de Soluções , clique com o botão direito do mouse na solução >Adicionar>Novo Projeto.
Selecione Aplicação Web ASP.NET Core.
Nomeie o aplicativo WebApp1.
Verifique se ASP.NET Core 2.1 ou posterior está selecionado.
Selecione Aplicativo Web>OK.
No Gerenciador de Soluções , clique com o botão direito do mouse em WebApp1 e selecione Configurar como Projeto de Inicialização.
A partir do Explorador de Soluções , clique com o botão direito em WebApp1 e selecione Dependências de Compilação>Dependências do Projeto.
Verifique RazorUIClassLib como uma dependência de WebApp1.
No Explorador de Soluções , clique com o botão direito do rato em WebApp1 e selecione Adicionar>Referência.
Na caixa de diálogo Reference Manager, verifique RazorUIClassLib>OK.
Execute o aplicativo.
Testar WebApp1
Navegue até /MyFeature/Page1 para verificar se a biblioteca de classes da interface do usuário do Razor está em uso.
Sobrescrever vistas, vistas parciais e páginas
Quando uma vista, vista parcial ou Página Razor é encontrada na aplicação web e na RCL, a marcação Razor (ficheiro .cshtml) na aplicação web tem precedência. Por exemplo, adicione WebApp1/Areas/MyFeature/Pages/Page1.cshtml ao WebApp1 e Page1 no WebApp1 terá precedência sobre Page1 na RCL.
No download de exemplo, renomeie WebApp1/Areas/MyFeature2 para WebApp1/Areas/MyFeature para testar a precedência.
Copiar a visualização parcial RazorUIClassLib/Areas/MyFeature/Pages/Shared/_Message.cshtml para WebApp1/Areas/MyFeature/Pages/Shared/_Message.cshtml. Atualize as marcações para indicar o novo local. Construa e execute a aplicação para verificar se está a ser utilizada a versão fragmentada da aplicação.
Layout de páginas RCL
Para fazer referência ao conteúdo RCL como se fizesse parte da pasta Pages da aplicação Web, crie o projeto RCL com a seguinte estrutura de ficheiros:
RazorUIClassLib/PagesRazorUIClassLib/Pages/Shared
Suponha que RazorUIClassLib/Pages/Shared contém dois arquivos parciais: _Header.cshtml e _Footer.cshtml. As <partial> tags podem ser adicionadas ao _Layout.cshtml arquivo:
<body>
<partial name="_Header">
@RenderBody()
<partial name="_Footer">
</body>
Razor vistas, páginas, controladores, modelos de página Razor componentes, componentes de exibição, e modelos de dados podem ser criados numa biblioteca de classes Razor (RCL). O RCL pode ser embalado e reutilizado. As aplicações podem incluir a RCL e substituir as visualizações e páginas que contêm. Quando uma vista, vista parcial ou Página Razor é encontrada na aplicação web e na RCL, a marcação Razor (ficheiro .cshtml) na aplicação web tem precedência.
Visualizar ou baixar código de exemplo (como descarregar)
Criar uma biblioteca de classes contendo a interface de usuário Razor
- No Visual Studio, selecione Criar um novo projeto.
- Selecione Razor Biblioteca de Classes>Próximo.
- Nomeie a biblioteca (por exemplo, "RazorClassLib") >Crie. Para evitar uma colisão de nome de arquivo com a biblioteca de exibição gerada, verifique se o nome da biblioteca não termina em
.Views. - Selecione suporte a páginas e modos de exibição se precisar oferecer suporte a modos de exibição. Por padrão, apenas Razor páginas são suportadas. Selecione Criar.
O modelo de biblioteca de classes Razor (RCL) define como padrão o desenvolvimento de componentes Razor. A opção páginas e visualizações de suporte suporta páginas e visualizações.
Adicione Razor arquivos à RCL.
Os modelos ASP.NET Core assumem que o conteúdo RCL está na pasta Areas. Veja o layout de Páginas RCL abaixo para criar uma RCL que exponha conteúdo em ~/Pages em vez de ~/Areas/Pages.
Conteúdo RCL de referência
O RCL pode ser referenciado por:
- Pacote NuGet. Consulte Criação de pacotes NuGet e dotnet adicionar pacote e Criar e publicar um pacote NuGet.
-
{ProjectName}.csproj. Veja dotnet-add referência.
Sobrescrever vistas, vistas parciais e páginas
Quando uma vista, vista parcial ou Página Razor é encontrada na aplicação web e na RCL, a marcação Razor (ficheiro .cshtml) na aplicação web tem precedência. Por exemplo, adicione WebApp1/Areas/MyFeature/Pages/Page1.cshtml ao WebApp1 e Page1 no WebApp1 terá precedência sobre Page1 na RCL.
No download de exemplo, renomeie WebApp1/Areas/MyFeature2 para WebApp1/Areas/MyFeature para testar a precedência.
Copiar a visualização parcial RazorUIClassLib/Areas/MyFeature/Pages/Shared/_Message.cshtml para WebApp1/Areas/MyFeature/Pages/Shared/_Message.cshtml. Atualize as marcações para indicar o novo local. Construa e execute a aplicação para verificar se está a ser utilizada a versão fragmentada da aplicação.
Se a RCL utilizar os Razor Pages, ative os serviços e pontos finais do Razor Pages na aplicação anfitriã.
public void ConfigureServices(IServiceCollection services)
{
services.AddControllersWithViews();
services.AddRazorPages();
}
public void Configure(IApplicationBuilder app)
{
app.UseStaticFiles();
app.UseRouting();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
endpoints.MapRazorPages();
});
}
Layout de páginas RCL
Para fazer referência ao conteúdo RCL como se fizesse parte da pasta Pages da aplicação Web, crie o projeto RCL com a seguinte estrutura de ficheiros:
RazorUIClassLib/PagesRazorUIClassLib/Pages/Shared
Suponha que RazorUIClassLib/Pages/Shared contém dois arquivos parciais: _Header.cshtml e _Footer.cshtml. As <partial> tags podem ser adicionadas ao _Layout.cshtml arquivo:
<body>
<partial name="_Header">
@RenderBody()
<partial name="_Footer">
</body>
Adicione o ficheiro _ViewStart.cshtml à pasta Pages do projeto RCL para utilizar o ficheiro _Layout.cshtml da aplicação Web anfitrião:
@{
Layout = "_Layout";
}
Criar um RCL com ativos estáticos
Uma RCL pode exigir ativos estáticos complementares que podem ser referenciados pela RCL ou pela aplicação consumidora da RCL. ASP.NET Core permite criar RCLs que incluem ativos estáticos que estão disponíveis para um aplicativo consumidor.
Para incluir ativos complementares como parte de uma RCL, crie uma pasta wwwroot na biblioteca de classes e inclua todos os arquivos necessários nessa pasta.
Ao embalar um RCL, todos os ativos complementares na pasta wwwroot são automaticamente incluídos no pacote.
Use o comando dotnet pack em vez da versão NuGet.exe nuget pack.
Excluir ativos estáticos
Para excluir ativos estáticos, adicione o caminho de exclusão desejado ao grupo de propriedades $(DefaultItemExcludes) no arquivo de projeto. Separe as entradas com ponto e vírgula (;).
No exemplo a seguir, a folha de estilo lib.css na pasta wwwroot não é considerada um ativo estático e não está incluída na RCL publicada:
<PropertyGroup>
<DefaultItemExcludes>$(DefaultItemExcludes);wwwroot\lib.css</DefaultItemExcludes>
</PropertyGroup>
Integração Typescript
Para incluir ficheiros TypeScript numa RCL:
Faça referência ao pacote NuGet
Microsoft.TypeScript.MSBuildno projeto.Note
Para obter orientação sobre como adicionar pacotes a aplicações .NET, consulte os artigos em Instalar e gerir pacotes no fluxo de trabalho de consumo de pacotes (documentação do NuGet). Confirme as versões corretas do pacote em NuGet.org.
Coloque os arquivos TypeScript (
.ts) fora da pastawwwroot. Por exemplo, coloque os arquivos em uma pastaClient.Configure o resultado de compilação do TypeScript para a pasta
wwwroot. Defina a propriedadeTypescriptOutDirdentro de umPropertyGroupno arquivo de projeto:<TypescriptOutDir>wwwroot</TypescriptOutDir>Inclua o destino TypeScript como uma dependência do destino
ResolveCurrentProjectStaticWebAssetsadicionando o seguinte destino dentro de umPropertyGroupno arquivo de projeto:<ResolveCurrentProjectStaticWebAssetsInputsDependsOn> CompileTypeScript; $(ResolveCurrentProjectStaticWebAssetsInputs) </ResolveCurrentProjectStaticWebAssetsInputsDependsOn>
Consumir conteúdo a partir de uma RCL referenciada
Os ficheiros incluídos na pasta wwwroot da RCL são expostos à RCL ou à aplicação consumidora sob o prefixo _content/{PACKAGE ID}/. Por exemplo, uma biblioteca com um nome de assembly de Razor.Class.Lib e sem um <PackageId> especificado no seu ficheiro de projeto resulta num caminho para o conteúdo estático em _content/Razor.Class.Lib/. Durante a produção de um pacote NuGet, se o nome do assembly não for o mesmo que o ID do pacote (<PackageId> no ficheiro de projeto da biblioteca), use o ID do pacote conforme especificado no ficheiro de projeto para {PACKAGE ID}.
O aplicativo de consumo faz referência a ativos estáticos fornecidos pela biblioteca com <script>, <style>, <img>e outras tags HTML. O aplicativo de consumo deve ter suporte a arquivos estáticos habilitado em Startup.Configure:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
...
app.UseStaticFiles();
...
}
Ao executar a app de consumo a partir da saída de compilação (dotnet run), os ativos web estáticos são habilitados por padrão no ambiente de Desenvolvimento. Para oferecer suporte a recursos em outros ambientes ao executar a partir da saída de compilação, chame UseStaticWebAssets no construtor de host em Program.cs:
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Hosting;
public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStaticWebAssets();
webBuilder.UseStartup<Startup>();
});
}
Chamar UseStaticWebAssets não é necessário ao executar um aplicativo a partir da saída publicada (dotnet publish).
Fluxo de desenvolvimento multi-projeto
Quando a aplicação de consumo entra em execução:
- Os ativos na RCL permanecem em suas pastas originais. Os ativos não são movidos para o aplicativo de consumo.
- Qualquer alteração dentro da pasta
wwwrootda RCL é refletida na aplicação consumidora depois de a RCL ser reconstruída e sem reconstruir a aplicação consumidora.
Quando o RCL é construído, é produzido um manifesto que descreve os locais dos ativos Web estáticos. A aplicação consumidora lê o manifesto durante a execução para consumir os recursos de projetos e pacotes referenciados. Quando um novo ativo é adicionado a uma RCL, a RCL deve ser reconstruída para atualizar seu manifesto antes que um aplicativo consumidor possa acessar o novo ativo.
Publish
Quando a aplicação é publicada, os ativos complementares de todos os projetos e pacotes referenciados são copiados para a pasta wwwroot da aplicação publicada sob _content/{PACKAGE ID}/. Quando estiver a produzir um pacote NuGet e o nome do assembly não for o mesmo que o ID do pacote (<PackageId> no ficheiro de projeto da biblioteca), utilize o ID do pacote conforme especificado no ficheiro de projeto para {PACKAGE ID}, ao examinar a pasta wwwroot para os ativos publicados.