事件
Power BI DataViz World Championships
2月14日 下午4時 - 3月31日 下午4時
4 次參賽機會,有機會贏得會議套裝行程,現場參與在拉斯維加斯舉行的總決賽
進一步了解您可以將 Razor 檢視、頁面、控制器、頁面模型、Razor 元件、檢視元件和資料模型建置到 Razor 類別庫 (RCL) 中。 RCL 可以封裝和重複使用。 應用程式可以包括 RCL,以及覆寫它所包含的檢視和頁面。 在 Web 應用程式和 RCL 中,發現檢視、部分檢視或 Razor Page 時,應優先處理 Web 應用程式中的 Razor 標記 (.cshtml
檔案)。
如需如何將 npm 和 webpack 整合到 RCL 的建置流程中的相關資訊,請參閱為您的 Razor 類別庫建置用戶端 Web 資產。
.Views
。預設情況下,Razor 類別庫範本預設為 Razor 元件開發。 [支援頁面和檢視] 選項支援頁面和檢視。 如需關於 Blazor 中 RCL 支援的詳細資訊,請參閱從 Razor 類別庫 (RCL) 取用 ASP.NET Core Razor 元件。
將 Razor 檔案新增至 RCL。
ASP.NET Core 範本假設 RCL 內容位於 Areas
資料夾中。 請參閱下面的 RCL 頁面配置,以建立在 ~/Pages
(而不是 ~/Areas/Pages
) 公開內容的 RCL。
RCL 可以由下列各項參考:
{ProjectName}.csproj
. 請參閱 dotnet-add reference。在 Web 應用程式和 RCL 中,發現檢視、部分檢視或 Razor Page 時,應優先處理 Web 應用程式中的 Razor 標記 (.cshtml
檔案)。 例如,將 WebApp1/Areas/MyFeature/Pages/Page1.cshtml
新增至 WebApp1,則 WebApp1 中 Page1 的優先順序將高於 RCL 中的 Page1。
在範例下載中,將 WebApp1/Areas/MyFeature2
重新命名為 WebApp1/Areas/MyFeature
,以測試優先順序。
將 RazorUIClassLib/Areas/MyFeature/Pages/Shared/_Message.cshtml
部分檢視複製到 WebApp1/Areas/MyFeature/Pages/Shared/_Message.cshtml
。 更新標記來指示新的位置。 建置並執行應用程式,以確認正在使用部分檢視的應用程式版本。
如果 RCL 使用 Razor Pages,請在裝載應用程式中啟用 Razor Pages 服務和端點:
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();
若要將 RCL 內容視為 Web 應用程式 Pages
資料夾的一部分來參考,請使用下列檔案結構建立 RCL 專案:
RazorUIClassLib/Pages
RazorUIClassLib/Pages/Shared
假設 RazorUIClassLib/Pages/Shared
包含兩個部分檔案:_Header.cshtml
和 _Footer.cshtml
。 可以將 <partial>
標記加入到 _Layout.cshtml
檔案中:
<body>
<partial name="_Header">
@RenderBody()
<partial name="_Footer">
</body>
將 _ViewStart.cshtml
檔案新增至 RCL 專案的 Pages
資料夾,以使用主機 Web 應用程式的 _Layout.cshtml
檔案:
@{
Layout = "_Layout";
}
RCL 可能需要 RCL 或 RCL 取用應用程式可以參考的附屬靜態資產。 ASP.NET Core 允許建立包含可供取用應用程式使用的靜態資產的 RCL。
若要在 RCL 中包含附屬資產,請在類別庫中建立 wwwroot
資料夾,並在該資料夾中包含所有必要的檔案。
封裝 RCL 時,wwwroot
資料夾中的所有附屬資產都會自動包含在套件中。
使用 dotnet pack
命令,而不是 NuGet.exe nuget pack
版。
將用戶端 Web 資產整合到建置管線中並非易事。 如需詳細資訊,請參閱建置 Razor 類別庫的用戶端 Web 資產。
若要排除靜態資產,請將所需的排除路徑新增至專案檔中的 $(DefaultItemExcludes)
屬性群組。 使用分號 (;
) 來分隔項目。
在下列範例中,lib.css
資料夾中的 wwwroot
樣式表不視為靜態資產,且不包含在已發佈的 RCL 中:
<PropertyGroup>
<DefaultItemExcludes>$(DefaultItemExcludes);wwwroot\lib.css</DefaultItemExcludes>
</PropertyGroup>
若要在 RCL 中包含 TypeScript 檔案,請執行下列作業:
參考專案中的 Microsoft.TypeScript.MSBuild
NuGet 套件。
將 TypeScript 檔案 (.ts
) 放在 wwwroot
資料夾外。 例如,將檔案放在 Client
資料夾中。
將下列標記新增至項目檔:
TypescriptOutDir
屬性來組態 wwwroot
資料夾的 TypeScript 編譯過程輸出。PrepareForBuildDependsOn
目標的相依性。wwwroot folder
中的輸出。<Project Sdk="Microsoft.NET.Sdk.Razor">
<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>
RCL 的 wwwroot
資料夾中所包含的檔案,會使用前置詞 _content/{PACKAGE ID}/
公開給 RCL 或取用應用程式。 例如,某程式庫的組件名稱為 Razor.Class.Lib
且在專案檔中未指定 <PackageId>
,則造成靜態內容路徑為 _content/Razor.Class.Lib/
。 產生 NuGet 套件且組件名稱與套件 ID (程式庫的專案檔中的 <PackageId>
) 不同時,請使用專案檔中針對 {PACKAGE ID}
指定的套件 ID。
取用應用程式會參考程式庫所提供的靜態資產,其中包含 <script>
、<style>
、<img>
和其他 HTML 標籤。 取用應用程式必須在以下位置啟用靜態檔案支援:
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();
從建置輸出 (dotnet run
) 執行取用應用程式時,預設會在開發環境中啟用靜態 Web 資產。 若要在從建置輸出執行時支援其他環境中的資產,請在 UseStaticWebAssets 中的主機建置器上呼叫 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();
從已發佈的輸出 (UseStaticWebAssets
) 執行應用程式時,不需要呼叫 dotnet publish
。
在取用應用程式執行時:
wwwroot
資料夾內的任何變更都會反映在取用應用程式中,且無需重建取用應用程式。建置 RCL 時,會產生一份描述靜態 Web 資產位置的資訊清單。 取用應用程式會在執行階段讀取資訊清單,以取用參考的專案和套件的資產。 將新的資產新增至 RCL 時,必須先重建 RCL 以更新其資訊清單,然後取用應用程式才能存取新的資產。
發佈應用程式時,所有參考專案和套件的附屬資產都會複製到已發佈應用程式的 wwwroot
資料夾的 _content/{PACKAGE ID}/
下。 產生 NuGet 套件且組件名稱與套件 ID (程式庫的專案檔中的 <PackageId>
) 不同時,請在檢查已發佈資產的 {PACKAGE ID}
資料夾時,使用專案檔中針對 wwwroot
指定的套件 ID。
您可以將 Razor 檢視、頁面、控制器、頁面模型、Razor 元件、檢視元件和資料模型建置到 Razor 類別庫 (RCL) 中。 RCL 可以封裝和重複使用。 應用程式可以包括 RCL,以及覆寫它所包含的檢視和頁面。 在 Web 應用程式和 RCL 中,發現檢視、部分檢視或 Razor Page 時,應優先處理 Web 應用程式中的 Razor 標記 (.cshtml
檔案)。
如需如何將 npm 和 webpack 整合到 Razor 類別庫的建置流程的相關資訊,請參閱為 Razor 類別庫建置用戶端 Web 資產。
.Views
。Razor 類別庫 (RCL) 範本預設為 Razor 元件開發。 [支援頁面和檢視] 選項支援頁面和檢視。
將 Razor 檔案新增至 RCL。
ASP.NET Core 範本假設 RCL 內容位於 Areas
資料夾中。 請參閱下面的 RCL 頁面配置,以建立在 ~/Pages
(而不是 ~/Areas/Pages
) 公開內容的 RCL。
RCL 可以由下列各項參考:
{ProjectName}.csproj
. 請參閱 dotnet-add reference。在 Web 應用程式和 RCL 中,發現檢視、部分檢視或 Razor Page 時,應優先處理 Web 應用程式中的 Razor 標記 (.cshtml
檔案)。 例如,將 WebApp1/Areas/MyFeature/Pages/Page1.cshtml
新增至 WebApp1,則 WebApp1 中 Page1 的優先順序將高於 RCL 中的 Page1。
在範例下載中,將 WebApp1/Areas/MyFeature2
重新命名為 WebApp1/Areas/MyFeature
,以測試優先順序。
將 RazorUIClassLib/Areas/MyFeature/Pages/Shared/_Message.cshtml
部分檢視複製到 WebApp1/Areas/MyFeature/Pages/Shared/_Message.cshtml
。 更新標記來指示新的位置。 建置並執行應用程式,以確認正在使用部分檢視的應用程式版本。
如果 RCL 使用 Razor Pages,請在裝載應用程式中啟用 Razor Pages 服務和端點:
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();
若要將 RCL 內容視為 Web 應用程式 Pages
資料夾的一部分來參考,請使用下列檔案結構建立 RCL 專案:
RazorUIClassLib/Pages
RazorUIClassLib/Pages/Shared
假設 RazorUIClassLib/Pages/Shared
包含兩個部分檔案:_Header.cshtml
和 _Footer.cshtml
。 可以將 <partial>
標記加入到 _Layout.cshtml
檔案中:
<body>
<partial name="_Header">
@RenderBody()
<partial name="_Footer">
</body>
將 _ViewStart.cshtml
檔案新增至 RCL 專案的 Pages
資料夾,以使用主機 Web 應用程式的 _Layout.cshtml
檔案:
@{
Layout = "_Layout";
}
RCL 可能需要 RCL 或 RCL 取用應用程式可以參考的附屬靜態資產。 ASP.NET Core 允許建立包含可供取用應用程式使用的靜態資產的 RCL。
若要在 RCL 中包含附屬資產,請在類別庫中建立 wwwroot
資料夾,並在該資料夾中包含所有必要的檔案。
封裝 RCL 時,wwwroot
資料夾中的所有附屬資產都會自動包含在套件中。
使用 dotnet pack
命令,而不是 NuGet.exe nuget pack
版。
若要排除靜態資產,請將所需的排除路徑新增至專案檔中的 $(DefaultItemExcludes)
屬性群組。 使用分號 (;
) 來分隔項目。
在下列範例中,lib.css
資料夾中的 wwwroot
樣式表不視為靜態資產,且不包含在已發佈的 RCL 中:
<PropertyGroup>
<DefaultItemExcludes>$(DefaultItemExcludes);wwwroot\lib.css</DefaultItemExcludes>
</PropertyGroup>
若要在 RCL 中包含 TypeScript 檔案,請執行下列作業:
參考專案中的 Microsoft.TypeScript.MSBuild
NuGet 套件。
將 TypeScript 檔案 (.ts
) 放在 wwwroot
資料夾外。 例如,將檔案放在 Client
資料夾中。
設定 wwwroot
資料夾的 TypeScript 建置輸出。 在專案檔中的 TypescriptOutDir
內設定 PropertyGroup
屬性:
<TypescriptOutDir>wwwroot</TypescriptOutDir>
透過在專案檔中的 PrepareForBuildDependsOn
內新增下列目標,將 TypeScript 目標併入為 PropertyGroup
目標的相依性:
<PrepareForBuildDependsOn>
CompileTypeScript;
GetTypeScriptOutputForPublishing;$(PrepareForBuildDependsOn)
</PrepareForBuildDependsOn>
RCL 的 wwwroot
資料夾中所包含的檔案,會使用前置詞 _content/{PACKAGE ID}/
公開給 RCL 或取用應用程式。 例如,某程式庫的組件名稱為 Razor.Class.Lib
且在專案檔中未指定 <PackageId>
,則造成靜態內容路徑為 _content/Razor.Class.Lib/
。 產生 NuGet 套件且組件名稱與套件 ID (程式庫的專案檔中的 <PackageId>
) 不同時,請使用專案檔中針對 {PACKAGE ID}
指定的套件 ID。
取用應用程式會參考程式庫所提供的靜態資產,其中包含 <script>
、<style>
、<img>
和其他 HTML 標籤。 取用應用程式必須在以下位置啟用靜態檔案支援:
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();
從建置輸出 (dotnet run
) 執行取用應用程式時,預設會在開發環境中啟用靜態 Web 資產。 若要在從建置輸出執行時支援其他環境中的資產,請在 UseStaticWebAssets 中的主機建置器上呼叫 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();
注意: .NET 6 只需要呼叫 builder.WebHost.UseWebRoot("wwwroot").UseStaticWebAssets
。 如需詳細資訊,請參閱這個 GitHub 問題。
從已發佈的輸出 (UseStaticWebAssets
) 執行應用程式時,不需要呼叫 dotnet publish
。
在取用應用程式執行時:
wwwroot
資料夾內的任何變更都會反映在取用應用程式中,且無需重建取用應用程式。建置 RCL 時,會產生一份描述靜態 Web 資產位置的資訊清單。 取用應用程式會在執行階段讀取資訊清單,以取用參考的專案和套件的資產。 將新的資產新增至 RCL 時,必須先重建 RCL 以更新其資訊清單,然後取用應用程式才能存取新的資產。
發佈應用程式時,所有參考專案和套件的附屬資產都會複製到已發佈應用程式的 wwwroot
資料夾的 _content/{PACKAGE ID}/
下。 產生 NuGet 套件且組件名稱與套件 ID (程式庫的專案檔中的 <PackageId>
) 不同時,請在檢查已發佈資產的 {PACKAGE ID}
資料夾時,使用專案檔中針對 wwwroot
指定的套件 ID。
您可以將 Razor 檢視、頁面、控制器、頁面模型、Razor 元件、檢視元件和資料模型建置到 Razor 類別庫 (RCL) 中。 RCL 可以封裝和重複使用。 應用程式可以包括 RCL,以及覆寫它所包含的檢視和頁面。 在 Web 應用程式和 RCL 中,發現檢視、部分檢視或 Razor Page 時,應優先處理 Web 應用程式中的 Razor 標記 (.cshtml
檔案)。
檢視或下載範例程式碼 \(英文\) (如何下載)
.Views
。預設情況下,Razor 類別庫 (RCL) 範本預設為 Razor 元件開發。 [支援頁面和檢視] 選項支援頁面和檢視。
將 Razor 檔案新增至 RCL。
ASP.NET Core 範本假設 RCL 內容位於 Areas
資料夾中。 請參閱 RCL 頁面配置,以建立在 ~/Pages
(而不是 ~/Areas/Pages
) 公開內容的 RCL。
RCL 可以由下列各項參考:
{ProjectName}.csproj
. 請參閱 dotnet-add reference。在 Web 應用程式和 RCL 中,發現檢視、部分檢視或 Razor Page 時,應優先處理 Web 應用程式中的 Razor 標記 (.cshtml
檔案)。 例如,將 WebApp1/Areas/MyFeature/Pages/Page1.cshtml
新增至 WebApp1,則 WebApp1 中 Page1 的優先順序將高於 RCL 中的 Page1。
在範例下載中,將 WebApp1/Areas/MyFeature2
重新命名為 WebApp1/Areas/MyFeature
,以測試優先順序。
將 RazorUIClassLib/Areas/MyFeature/Pages/Shared/_Message.cshtml
部分檢視複製到 WebApp1/Areas/MyFeature/Pages/Shared/_Message.cshtml
。 更新標記來指示新的位置。 建置並執行應用程式,以確認正在使用部分檢視的應用程式版本。
若要將 RCL 內容視為 Web 應用程式 Pages
資料夾的一部分來參考,請使用下列檔案結構建立 RCL 專案:
RazorUIClassLib/Pages
RazorUIClassLib/Pages/Shared
假設 RazorUIClassLib/Pages/Shared
包含兩個部分檔案:_Header.cshtml
和 _Footer.cshtml
。 可以將 <partial>
標記加入到 _Layout.cshtml
檔案中:
<body>
<partial name="_Header">
@RenderBody()
<partial name="_Footer">
</body>
將 _ViewStart.cshtml
檔案新增至 RCL 專案的 Pages
資料夾,以使用主機 Web 應用程式的 _Layout.cshtml
檔案:
@{
Layout = "_Layout";
}
RCL 可能需要 RCL 或 RCL 取用應用程式可以參考的附屬靜態資產。 ASP.NET Core 允許建立包含可供取用應用程式使用的靜態資產的 RCL。
若要在 RCL 中包含附屬資產,請在類別庫中建立 wwwroot
資料夾,並在該資料夾中包含所有必要的檔案。
封裝 RCL 時,wwwroot
資料夾中的所有附屬資產都會自動包含在套件中。
使用 dotnet pack
命令,而不是 NuGet.exe nuget pack
版。
若要排除靜態資產,請將所需的排除路徑新增至專案檔中的 $(DefaultItemExcludes)
屬性群組。 使用分號 (;
) 來分隔項目。
在下列範例中,lib.css
資料夾中的 wwwroot
樣式表不視為靜態資產,且不包含在已發佈的 RCL 中:
<PropertyGroup>
<DefaultItemExcludes>$(DefaultItemExcludes);wwwroot\lib.css</DefaultItemExcludes>
</PropertyGroup>
若要在 RCL 中包含 TypeScript 檔案,請執行下列作業:
參考專案中的 Microsoft.TypeScript.MSBuild
NuGet 套件。
將 TypeScript 檔案 (.ts
) 放在 wwwroot
資料夾外。 例如,將檔案放在 Client
資料夾中。
設定 wwwroot
資料夾的 TypeScript 建置輸出。 在專案檔中的 TypescriptOutDir
內設定 PropertyGroup
屬性:
<TypescriptOutDir>wwwroot</TypescriptOutDir>
透過在專案檔中的 ResolveCurrentProjectStaticWebAssets
內新增下列目標,將 TypeScript 目標併入為 PropertyGroup
目標的相依性:
<ResolveCurrentProjectStaticWebAssetsInputsDependsOn>
CompileTypeScript;
$(ResolveCurrentProjectStaticWebAssetsInputs)
</ResolveCurrentProjectStaticWebAssetsInputsDependsOn>
RCL 的 wwwroot
資料夾中所包含的檔案,會使用前置詞 _content/{PACKAGE ID}/
公開給 RCL 或取用應用程式。 例如,某程式庫的組件名稱為 Razor.Class.Lib
且在專案檔中未指定 <PackageId>
,則造成靜態內容路徑為 _content/Razor.Class.Lib/
。 產生 NuGet 套件且組件名稱與套件 ID (程式庫的專案檔中的 <PackageId>
) 不同時,請使用專案檔中針對 {PACKAGE ID}
指定的套件 ID。
取用應用程式會參考程式庫所提供的靜態資產,其中包含 <script>
、<style>
、<img>
和其他 HTML 標籤。 取用應用程式必須在 中啟用Startup.Configure
:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
...
app.UseStaticFiles();
...
}
從建置輸出 (dotnet run
) 執行取用應用程式時,預設會在開發環境中啟用靜態 Web 資產。 若要在從建置輸出執行時支援其他環境中的資產,請在 UseStaticWebAssets
中的主機建置器上呼叫 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>();
});
}
從已發佈的輸出 (UseStaticWebAssets
) 執行應用程式時,不需要呼叫 dotnet publish
。
在取用應用程式執行時:
wwwroot
資料夾內的任何變更都會反映在取用應用程式中,且無需重建取用應用程式。建置 RCL 時,會產生一份描述靜態 Web 資產位置的資訊清單。 取用應用程式會在執行階段讀取資訊清單,以取用參考的專案和套件的資產。 將新的資產新增至 RCL 時,必須先重建 RCL 以更新其資訊清單,然後取用應用程式才能存取新的資產。
發佈應用程式時,所有參考專案和套件的附屬資產都會複製到已發佈應用程式的 wwwroot
資料夾的 _content/{PACKAGE ID}/
下。 產生 NuGet 套件且組件名稱與套件 ID (程式庫的專案檔中的 <PackageId>
) 不同時,請在檢查已發佈資產的 {PACKAGE ID}
資料夾時,使用專案檔中針對 wwwroot
指定的套件 ID。
您可以將 Razor 檢視、頁面、控制器、頁面模型、Razor 元件、檢視元件和資料模型建置到 Razor 類別庫 (RCL) 中。 RCL 可以封裝和重複使用。 應用程式可以包括 RCL,以及覆寫它所包含的檢視和頁面。 在 Web 應用程式和 RCL 中,發現檢視、部分檢視或 Razor Page 時,應優先處理 Web 應用程式中的 Razor 標記 (.cshtml
檔案)。
檢視或下載範例程式碼 \(英文\) (如何下載)
.Views
。RCL 具有下列專案檔:
<Project Sdk="Microsoft.NET.Sdk.Razor">
<PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework>
<AddRazorSupportForMvc>true</AddRazorSupportForMvc>
</PropertyGroup>
<ItemGroup>
<FrameworkReference Include="Microsoft.AspNetCore.App" />
</ItemGroup>
</Project>
將 Razor 檔案新增至 RCL。
ASP.NET Core 範本假設 RCL 內容位於 Areas
資料夾中。 請參閱 RCL 頁面配置,以建立在 ~/Pages
(而不是 ~/Areas/Pages
) 公開內容的 RCL。
RCL 可以由下列各項參考:
{ProjectName}.csproj
. 請參閱 dotnet-add reference。您可以下載完整專案並測試它,而不是建立它。 下載範例包含額外的程式碼和連結,讓您輕鬆地測試專案。 您可以在此 GitHub 問題留下意見反應以及您對下載範例與逐步指示的評論。
如果您尚未下載已完成的應用程式,而是要建立逐步解說專案,請跳至下一節。
在 Visual Studio 中開啟 .sln
檔案。 執行應用程式。
遵循測試 WebApp1 中的指示執行。
在本節中,會建立一個 RCL。 Razor 檔案已新增至 RCL。
建立 RCL 專案:
RazorUIClassLib/Areas/MyFeature/Pages/Shared/_Message.cshtml
部分檢視檔案。將 RazorUIClassLib/Areas/MyFeature/Pages/Shared/_Message.cshtml
中的標記取代為下列程式碼:
<h3>_Message.cshtml partial view.</h3>
<p>RazorUIClassLib\Areas\MyFeature\Pages\Shared\_Message.cshtml</p>
將 RazorUIClassLib/Areas/MyFeature/Pages/Page1.cshtml
中的標記取代為下列程式碼:
@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" />
需要 @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
才能使用部分檢視 (<partial name="_Message" />
)。 您可以新增 @addTagHelper
檔案,而不是包含 _ViewImports.cshtml
指示詞。 例如:
dotnet new viewimports -o RazorUIClassLib/Areas/MyFeature/Pages
如需 _ViewImports.cshtml
的詳細資訊,請參閱匯入共用指示詞。
建置類別庫,以確認沒有任何編譯器錯誤:
dotnet build RazorUIClassLib
建置輸出包含 RazorUIClassLib.dll
和 RazorUIClassLib.Views.dll
。
RazorUIClassLib.Views.dll
包含已編譯的 Razor 內容。
建立 Razor Pages Web 應用程式:
在 [方案總管] 中,以滑鼠右鍵按一下解決方案 >[新增]>[新增專案]。
選取 [ASP.NET Core Web 應用程式]。
將應用程式命名為 WebApp1。
確認已選取 ASP.NET Core 2.1 或更新版本。
選取 [Web 應用程式]>[確定]。
從 [方案總管],以滑鼠右鍵按一下 WebApp1,然後選取 [設定為啟始專案]。
從方案總管,以滑鼠右鍵按一下 WebApp1,然後選取 [建置相依性]>[專案相依性]。
核取 RazorUIClassLib 作為 WebApp1 的相依性。
從 [方案總管],以滑鼠右鍵按一下 WebApp1,然後選取 [新增]>[參考]。
在 [參考管理員] 對話方塊中,核取 RazorUIClassLib>[確定]。
執行應用程式。
瀏覽至 /MyFeature/Page1
,以確認 Razor UI 類別庫正在使用中。
在 Web 應用程式和 RCL 中,發現檢視、部分檢視或 Razor Page 時,應優先處理 Web 應用程式中的 Razor 標記 (.cshtml
檔案)。 例如,將 WebApp1/Areas/MyFeature/Pages/Page1.cshtml
新增至 WebApp1,則 WebApp1 中 Page1 的優先順序將高於 RCL 中的 Page1。
在範例下載中,將 WebApp1/Areas/MyFeature2
重新命名為 WebApp1/Areas/MyFeature
,以測試優先順序。
將 RazorUIClassLib/Areas/MyFeature/Pages/Shared/_Message.cshtml
部分檢視複製到 WebApp1/Areas/MyFeature/Pages/Shared/_Message.cshtml
。 更新標記來指示新的位置。 建置並執行應用程式,以確認正在使用部分檢視的應用程式版本。
若要將 RCL 內容視為 Web 應用程式 Pages
資料夾的一部分來參考,請使用下列檔案結構建立 RCL 專案:
RazorUIClassLib/Pages
RazorUIClassLib/Pages/Shared
假設 RazorUIClassLib/Pages/Shared
包含兩個部分檔案:_Header.cshtml
和 _Footer.cshtml
。 可以將 <partial>
標記加入到 _Layout.cshtml
檔案中:
<body>
<partial name="_Header">
@RenderBody()
<partial name="_Footer">
</body>
您可以將 Razor 檢視、頁面、控制器、頁面模型、Razor 元件、檢視元件和資料模型建置到 Razor 類別庫 (RCL) 中。 RCL 可以封裝和重複使用。 應用程式可以包括 RCL,以及覆寫它所包含的檢視和頁面。 在 Web 應用程式和 RCL 中,發現檢視、部分檢視或 Razor Page 時,應優先處理 Web 應用程式中的 Razor 標記 (.cshtml
檔案)。
檢視或下載範例程式碼 \(英文\) (如何下載)
.Views
。預設情況下,Razor 類別庫 (RCL) 範本預設為 Razor 元件開發。 [支援頁面和檢視] 選項支援頁面和檢視。
將 Razor 檔案新增至 RCL。
ASP.NET Core 範本假設 RCL 內容位於 Areas
資料夾中。 請參閱下面的 RCL 頁面配置,以建立在 ~/Pages
(而不是 ~/Areas/Pages
) 公開內容的 RCL。
RCL 可以由下列各項參考:
{ProjectName}.csproj
. 請參閱 dotnet-add reference。在 Web 應用程式和 RCL 中,發現檢視、部分檢視或 Razor Page 時,應優先處理 Web 應用程式中的 Razor 標記 (.cshtml
檔案)。 例如,將 WebApp1/Areas/MyFeature/Pages/Page1.cshtml
新增至 WebApp1,則 WebApp1 中 Page1 的優先順序將高於 RCL 中的 Page1。
在範例下載中,將 WebApp1/Areas/MyFeature2
重新命名為 WebApp1/Areas/MyFeature
,以測試優先順序。
將 RazorUIClassLib/Areas/MyFeature/Pages/Shared/_Message.cshtml
部分檢視複製到 WebApp1/Areas/MyFeature/Pages/Shared/_Message.cshtml
。 更新標記來指示新的位置。 建置並執行應用程式,以確認正在使用部分檢視的應用程式版本。
如果 RCL 使用 Razor Pages,請在裝載應用程式中啟用 Razor Pages 服務和端點:
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();
});
}
若要將 RCL 內容視為 Web 應用程式 Pages
資料夾的一部分來參考,請使用下列檔案結構建立 RCL 專案:
RazorUIClassLib/Pages
RazorUIClassLib/Pages/Shared
假設 RazorUIClassLib/Pages/Shared
包含兩個部分檔案:_Header.cshtml
和 _Footer.cshtml
。 可以將 <partial>
標記加入到 _Layout.cshtml
檔案中:
<body>
<partial name="_Header">
@RenderBody()
<partial name="_Footer">
</body>
將 _ViewStart.cshtml
檔案新增至 RCL 專案的 Pages
資料夾,以使用主機 Web 應用程式的 _Layout.cshtml
檔案:
@{
Layout = "_Layout";
}
RCL 可能需要 RCL 或 RCL 取用應用程式可以參考的附屬靜態資產。 ASP.NET Core 允許建立包含可供取用應用程式使用的靜態資產的 RCL。
若要在 RCL 中包含附屬資產,請在類別庫中建立 wwwroot
資料夾,並在該資料夾中包含所有必要的檔案。
封裝 RCL 時,wwwroot
資料夾中的所有附屬資產都會自動包含在套件中。
使用 dotnet pack
命令,而不是 NuGet.exe nuget pack
版。
若要排除靜態資產,請將所需的排除路徑新增至專案檔中的 $(DefaultItemExcludes)
屬性群組。 使用分號 (;
) 來分隔項目。
在下列範例中,lib.css
資料夾中的 wwwroot
樣式表不視為靜態資產,且不包含在已發佈的 RCL 中:
<PropertyGroup>
<DefaultItemExcludes>$(DefaultItemExcludes);wwwroot\lib.css</DefaultItemExcludes>
</PropertyGroup>
若要在 RCL 中包含 TypeScript 檔案,請執行下列作業:
參考專案中的 Microsoft.TypeScript.MSBuild
NuGet 套件。
將 TypeScript 檔案 (.ts
) 放在 wwwroot
資料夾外。 例如,將檔案放在 Client
資料夾中。
設定 wwwroot
資料夾的 TypeScript 建置輸出。 在專案檔中的 TypescriptOutDir
內設定 PropertyGroup
屬性:
<TypescriptOutDir>wwwroot</TypescriptOutDir>
透過在專案檔中的 ResolveCurrentProjectStaticWebAssets
內新增下列目標,將 TypeScript 目標併入為 PropertyGroup
目標的相依性:
<ResolveCurrentProjectStaticWebAssetsInputsDependsOn>
CompileTypeScript;
$(ResolveCurrentProjectStaticWebAssetsInputs)
</ResolveCurrentProjectStaticWebAssetsInputsDependsOn>
RCL 的 wwwroot
資料夾中所包含的檔案,會使用前置詞 _content/{PACKAGE ID}/
公開給 RCL 或取用應用程式。 例如,某程式庫的組件名稱為 Razor.Class.Lib
且在專案檔中未指定 <PackageId>
,則造成靜態內容路徑為 _content/Razor.Class.Lib/
。 產生 NuGet 套件且組件名稱與套件 ID (程式庫的專案檔中的 <PackageId>
) 不同時,請使用專案檔中針對 {PACKAGE ID}
指定的套件 ID。
取用應用程式會參考程式庫所提供的靜態資產,其中包含 <script>
、<style>
、<img>
和其他 HTML 標籤。 取用應用程式必須在 中啟用Startup.Configure
:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
...
app.UseStaticFiles();
...
}
從建置輸出 (dotnet run
) 執行取用應用程式時,預設會在開發環境中啟用靜態 Web 資產。 若要在從建置輸出執行時支援其他環境中的資產,請在 UseStaticWebAssets
中的主機建置器上呼叫 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>();
});
}
從已發佈的輸出 (UseStaticWebAssets
) 執行應用程式時,不需要呼叫 dotnet publish
。
在取用應用程式執行時:
wwwroot
資料夾內的任何變更都會反映在取用應用程式中,且無需重建取用應用程式。建置 RCL 時,會產生一份描述靜態 Web 資產位置的資訊清單。 取用應用程式會在執行階段讀取資訊清單,以取用參考的專案和套件的資產。 將新的資產新增至 RCL 時,必須先重建 RCL 以更新其資訊清單,然後取用應用程式才能存取新的資產。
發佈應用程式時,所有參考專案和套件的附屬資產都會複製到已發佈應用程式的 wwwroot
資料夾的 _content/{PACKAGE ID}/
下。 產生 NuGet 套件且組件名稱與套件 ID (程式庫的專案檔中的 <PackageId>
) 不同時,請在檢查已發佈資產的 {PACKAGE ID}
資料夾時,使用專案檔中針對 wwwroot
指定的套件 ID。
事件
Power BI DataViz World Championships
2月14日 下午4時 - 3月31日 下午4時
4 次參賽機會,有機會贏得會議套裝行程,現場參與在拉斯維加斯舉行的總決賽
進一步了解訓練
文件
從 Razor 類別庫 (RCL) 取用 ASP.NET Core Razor 元件
探索如何從外部 Blazor 類別庫 (RCL) 將元件包含在 Razor 應用程式中。
整合 ASP.NET Core Razor 元件與MVC或 Razor Pages
瞭解 Razor MVC或 Razor Pages的 Razor 元件整合案例,包括預先呈現伺服器上的元件。
了解將伺服器型程式碼內嵌至網頁的 Razor 標記語法。