ASP.NET Core'da sınıf kitaplığı projesini Razor kullanarak yeniden kullanılabilir kullanıcı arabirimi oluşturma

Gönderen Rick Anderson

Razor görünümler, sayfalar, denetleyiciler, sayfa modelleri, Razor bileşenler, Görünüm bileşenleri ve veri modelleri bir Razor sınıf kitaplığında (RCL) yerleşik olarak oluşturulabilir. RCL paketlenebilir ve yeniden kullanılabilir. Uygulamalar RCL'yi içerebilir ve içerdiği görünümleri ve sayfaları geçersiz kılabilir. Hem web uygulamasında hem de RCL'de bir görünüm, kısmi görünüm veya Razor Sayfa bulunduğunda, web uygulamasındaki Razor işaretleme (.cshtml dosya) öncelikli olur.

Npm ve webpack'i bir Razor Sınıf Kitaplığı için derleme işlemiyle tümleştirme hakkında bilgi için bkz. Sınıf Kitaplığınız Razoriçin istemci web varlıkları oluşturma.

Kullanıcı arabirimi içeren Razor bir sınıf kitaplığı oluşturma

  • Visual Studio'dan Yeni proje oluştur'u seçin.
  • Sınıf Kitaplığı>İleri'yi seçin.Razor
  • Kitaplığı adlandırın (örneğin, "RazorClassLib"), >Create. Oluşturulan görünüm kitaplığıyla dosya adı çakışmasını önlemek için, kitaplık adının ile .Viewsbitmiyor olduğundan emin olun.
  • Kitaplığın sayfaları ve/veya görünümleri içermesi gerekiyorsa Destek sayfaları ve görünümleri'ni seçin. Varsayılan olarak, yalnızca Razor bileşenler desteklenir. Oluştur'u belirleyin.

Sınıf Razor kitaplığı (RCL) şablonu varsayılan olarak bileşen geliştirme olarak Razor kullanılır. Sayfaları ve görünümleri destekle seçeneği sayfaları ve görünümleri destekler. içindeki BlazorRCL desteği hakkında daha fazla bilgi için bkz. Sınıf kitaplığından Razor (RCL) ASP.NET Core Razor bileşenlerini kullanma.

RCL'ye dosya ekleyin Razor .

ASP.NET Core şablonları, RCL içeriğinin Areas klasörde olduğunu varsayar. yerine içindeki ~/Pages~/Areas/Pagesiçeriği kullanıma sunan bir RCL oluşturmak için aşağıdaki RCL Sayfaları düzenine bakın.

RCL içeriğine başvurma

RCL'ye şu şekilde başvurabilirsiniz:

Görünümleri, kısmi görünümleri ve sayfaları geçersiz kılma

Hem web uygulamasında hem de RCL'de bir görünüm, kısmi görünüm veya Razor Sayfa bulunduğunda, web uygulamasındaki Razor işaretleme (.cshtml dosya) öncelikli olur. Örneğin, WebApp1'e ekleyin WebApp1/Areas/MyFeature/Pages/Page1.cshtml ve WebApp1'deki Sayfa1, RCL'deki Sayfa1'den önceliklidir.

Örnek indirmede, önceliği test etmek için WebApp1/Areas/MyFeature olarak yeniden adlandırınWebApp1/Areas/MyFeature2.

RazorUIClassLib/Areas/MyFeature/Pages/Shared/_Message.cshtml Kısmi görünümü öğesine WebApp1/Areas/MyFeature/Pages/Shared/_Message.cshtmlkopyalayın. İşaretlemeyi yeni konumu gösterecek şekilde güncelleştirin. Uygulamanın kısmi sürümünün kullanıldığını doğrulamak için uygulamayı derleyin ve çalıştırın.

RCL Pages kullanıyorsa Razor barındırma uygulamasında Pages hizmetlerini ve uç noktalarını etkinleştirin Razor :

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 Sayfaları düzeni

Web uygulamasının Pages klasörünün bir parçası gibi RCL içeriğine başvurmak için aşağıdaki dosya yapısıyla RCL projesini oluşturun:

  • RazorUIClassLib/Pages
  • RazorUIClassLib/Pages/Shared

İki kısmi dosya içerdiğini varsayalım RazorUIClassLib/Pages/Shared : _Header.cshtml ve _Footer.cshtml. Etiketler <partial> dosyaya _Layout.cshtml eklenebilir:

<body>
  <partial name="_Header">
  @RenderBody()
  <partial name="_Footer">
</body>

_ViewStart.cshtml Dosyayı konak web uygulamasından kullanmak için RCL projesinin Pages_Layout.cshtml klasörüne ekleyin:

@{
    Layout = "_Layout";
}

Statik varlıklarla RCL oluşturma

RCL, RCL veya RCL'nin tüketen uygulaması tarafından başvurulabilen yardımcı statik varlıklar gerektirebilir. ASP.NET Core, tüketen bir uygulamanın kullanabileceği statik varlıkları içeren RCL'ler oluşturmaya olanak tanır.

Yardımcı varlıkları bir RCL'nin parçası olarak eklemek için sınıf kitaplığında bir wwwroot klasör oluşturun ve gerekli dosyaları bu klasöre ekleyin.

RCL paketlenirken, klasördeki wwwroot tüm yardımcı varlıklar otomatik olarak pakete eklenir.

dotnet pack NuGet.exe sürümü nuget packyerine komutunu kullanın.

Derleme işlemine istemci web varlıkları ekleme

İstemci web varlıklarını derleme işlem hattıyla tümleştirmek kolay değildir. Daha fazla bilgi için bkz. Sınıf KitaplığınızRazor için istemci web varlıkları oluşturma.

Statik varlıkları dışlama

Statik varlıkları dışlamak için, istenen dışlama yolunu proje dosyasındaki $(DefaultItemExcludes) özellik grubuna ekleyin. Girişleri noktalı virgülle (; ) ayırın.

Aşağıdaki örnekte, lib.css klasördeki wwwroot stil sayfası statik varlık olarak kabul edilmez ve yayımlanan RCL'ye dahil edilmez:

<PropertyGroup>
  <DefaultItemExcludes>$(DefaultItemExcludes);wwwroot\lib.css</DefaultItemExcludes>
</PropertyGroup>

Typescript tümleştirmesi

TypeScript dosyalarını RCL'ye eklemek için:

  1. Projede Microsoft.TypeScript.MSBuild NuGet paketine başvurun.

    Not

    .NET uygulamalarına paket ekleme hakkında yönergeler için, Paket tüketimi iş akışında (NuGet belgeleri)paketleri yüklemek ve yönetmek altındaki makalelere bakın. NuGet.org'da doğru paket sürümlerini onaylayın.

  2. TypeScript dosyalarını (.ts) klasörün dışına wwwroot yerleştirin. Örneğin, dosyaları bir Client klasöre yerleştirin.

  3. Klasörün TypeScript derleme çıkışını wwwroot yapılandırın. TypescriptOutDir Proje dosyasında içindeki özelliğini PropertyGroup ayarlayın:

    <TypescriptOutDir>wwwroot</TypescriptOutDir>
    
  4. Proje dosyasına aşağıdaki hedefi ekleyerek TypeScript hedefini PropertyGroup hedefin PrepareForBuildDependsOn bağımlılığı olarak ekleyin:

    <PrepareForBuildDependsOn>
      CompileTypeScript;
      GetTypeScriptOutputForPublishing;$(PrepareForBuildDependsOn)
    </PrepareForBuildDependsOn>
    

Başvuruda bulunan RCL'den içerik kullanma

RCL klasöründe yer wwwroot alan dosyalar RCL'ye veya ön ekinin _content/{PACKAGE ID}/altındaki tüketen uygulamaya sunulur. Örneğin, derleme adına Razor.Class.Lib sahip ve proje dosyasında belirtilmemiş bir <PackageId> kitaplık, konumundaki _content/Razor.Class.Lib/statik içeriğe giden bir yola neden olur. NuGet paketi oluştururken ve derleme adı paket kimliğiyle aynı olmadığında (<PackageId> kitaplığın proje dosyasında), için {PACKAGE ID}proje dosyasında belirtilen paket kimliğini kullanın.

Tüketen uygulama, kitaplık tarafından sağlanan statik varlıklara , <style>, <img>ve diğer HTML etiketleriyle <script>başvurur. Tüketen uygulamanın şu durumlarda statik dosya desteği etkinleştirilmelidir:

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();

Kullanan uygulamayı derleme çıkışından ()dotnet run çalıştırırken, geliştirme ortamında statik web varlıkları varsayılan olarak etkinleştirilir. Derleme çıkışından çalışırken diğer ortamlardaki varlıkları desteklemek için içindeki konak oluşturucusunu Program.csçağırınUseStaticWebAssets:

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();

Yayımlanan çıkıştan (dotnet publish) bir uygulama çalıştırılırken çağrı UseStaticWebAssets yapılması gerekmez.

Çok projeli geliştirme akışı

Tüketen uygulama çalıştırıldığında:

  • RCL'deki varlıklar özgün klasörlerinde kalır. Varlıklar, tüketen uygulamaya taşınmaz.
  • RCL'nin wwwroot klasöründeki tüm değişiklikler, RCL yeniden derlendikten sonra ve kullanan uygulamayı yeniden oluşturmadan tüketen uygulamaya yansıtılır.

RCL oluşturulduğunda, statik web varlığı konumlarını açıklayan bir bildirim oluşturulur. Kullanan uygulama, başvuruda bulunan proje ve paketlerdeki varlıkları kullanmak için çalışma zamanında bildirimi okur. RCL'ye yeni bir varlık eklendiğinde, tüketen bir uygulamanın yeni varlığa erişebilmesi için önce RCL'nin bildirimini güncelleştirmek için yeniden oluşturulması gerekir.

Yayımlama

Uygulama yayımlandığında, başvuruda bulunan tüm projelerin ve paketlerin wwwroot yardımcı varlıkları, altında _content/{PACKAGE ID}/yayımlanan uygulamanın klasörüne kopyalanır. NuGet paketi oluştururken ve derleme adı paket kimliğiyle (<PackageId>kitaplığın proje dosyasında) aynı değilse, yayımlanan varlıkların klasörünü incelerken wwwroot için proje dosyasında {PACKAGE ID} belirtilen paket kimliğini kullanın.

Ek kaynaklar

Razor görünümler, sayfalar, denetleyiciler, sayfa modelleri, Razor bileşenler, Görünüm bileşenleri ve veri modelleri bir Razor sınıf kitaplığında (RCL) yerleşik olarak oluşturulabilir. RCL paketlenebilir ve yeniden kullanılabilir. Uygulamalar RCL'yi içerebilir ve içerdiği görünümleri ve sayfaları geçersiz kılabilir. Hem web uygulamasında hem de RCL'de bir görünüm, kısmi görünüm veya Razor Sayfa bulunduğunda, web uygulamasındaki Razor işaretleme (.cshtml dosya) öncelikli olur.

Npm ve webpack'i bir Razor Sınıf Kitaplığı için derleme işlemiyle tümleştirme hakkında bilgi için bkz. Sınıf Kitaplığınız Razoriçin istemci web varlıkları oluşturma.

Kullanıcı arabirimi içeren Razor bir sınıf kitaplığı oluşturma

  • Visual Studio'dan Yeni proje oluştur'u seçin.
  • Sınıf Kitaplığı>İleri'yi seçin.Razor
  • Kitaplığı adlandırın (örneğin, "RazorClassLib"), >Create. Oluşturulan görünüm kitaplığıyla dosya adı çakışmasını önlemek için, kitaplık adının ile .Viewsbitmiyor olduğundan emin olun.
  • Görünümleri desteklemeniz gerekiyorsa Destek sayfaları ve görünümleri'ne tıklayın. Varsayılan olarak, yalnızca Razor Sayfalar desteklenir. Oluştur'u belirleyin.

Sınıf Razor kitaplığı (RCL) şablonu varsayılan olarak bileşen geliştirme olarak Razor kullanılır. Sayfaları ve görünümleri destekle seçeneği sayfaları ve görünümleri destekler.

RCL'ye dosya ekleyin Razor .

ASP.NET Core şablonları, RCL içeriğinin Areas klasörde olduğunu varsayar. yerine içindeki ~/Pages~/Areas/Pagesiçeriği kullanıma sunan bir RCL oluşturmak için aşağıdaki RCL Sayfaları düzenine bakın.

RCL içeriğine başvurma

RCL'ye şu şekilde başvurabilirsiniz:

Görünümleri, kısmi görünümleri ve sayfaları geçersiz kılma

Hem web uygulamasında hem de RCL'de bir görünüm, kısmi görünüm veya Razor Sayfa bulunduğunda, web uygulamasındaki Razor işaretleme (.cshtml dosya) öncelikli olur. Örneğin, WebApp1'e ekleyin WebApp1/Areas/MyFeature/Pages/Page1.cshtml ve WebApp1'deki Sayfa1, RCL'deki Sayfa1'den önceliklidir.

Örnek indirmede, önceliği test etmek için WebApp1/Areas/MyFeature olarak yeniden adlandırınWebApp1/Areas/MyFeature2.

RazorUIClassLib/Areas/MyFeature/Pages/Shared/_Message.cshtml Kısmi görünümü öğesine WebApp1/Areas/MyFeature/Pages/Shared/_Message.cshtmlkopyalayın. İşaretlemeyi yeni konumu gösterecek şekilde güncelleştirin. Uygulamanın kısmi sürümünün kullanıldığını doğrulamak için uygulamayı derleyin ve çalıştırın.

RCL Pages kullanıyorsa Razor barındırma uygulamasında Pages hizmetlerini ve uç noktalarını etkinleştirin Razor :

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 Sayfaları düzeni

Web uygulamasının Pages klasörünün bir parçası gibi RCL içeriğine başvurmak için aşağıdaki dosya yapısıyla RCL projesini oluşturun:

  • RazorUIClassLib/Pages
  • RazorUIClassLib/Pages/Shared

İki kısmi dosya içerdiğini varsayalım RazorUIClassLib/Pages/Shared : _Header.cshtml ve _Footer.cshtml. Etiketler <partial> dosyaya _Layout.cshtml eklenebilir:

<body>
  <partial name="_Header">
  @RenderBody()
  <partial name="_Footer">
</body>

_ViewStart.cshtml Dosyayı konak web uygulamasından kullanmak için RCL projesinin Pages_Layout.cshtml klasörüne ekleyin:

@{
    Layout = "_Layout";
}

Statik varlıklarla RCL oluşturma

RCL, RCL veya RCL'nin tüketen uygulaması tarafından başvurulabilen yardımcı statik varlıklar gerektirebilir. ASP.NET Core, tüketen bir uygulamanın kullanabileceği statik varlıkları içeren RCL'ler oluşturmaya olanak tanır.

Yardımcı varlıkları bir RCL'nin parçası olarak eklemek için sınıf kitaplığında bir wwwroot klasör oluşturun ve gerekli dosyaları bu klasöre ekleyin.

RCL paketlenirken, klasördeki wwwroot tüm yardımcı varlıklar otomatik olarak pakete eklenir.

dotnet pack NuGet.exe sürümü nuget packyerine komutunu kullanın.

Statik varlıkları dışlama

Statik varlıkları dışlamak için, istenen dışlama yolunu proje dosyasındaki $(DefaultItemExcludes) özellik grubuna ekleyin. Girişleri noktalı virgülle (; ) ayırın.

Aşağıdaki örnekte, lib.css klasördeki wwwroot stil sayfası statik varlık olarak kabul edilmez ve yayımlanan RCL'ye dahil edilmez:

<PropertyGroup>
  <DefaultItemExcludes>$(DefaultItemExcludes);wwwroot\lib.css</DefaultItemExcludes>
</PropertyGroup>

Typescript tümleştirmesi

TypeScript dosyalarını RCL'ye eklemek için:

  1. Projede Microsoft.TypeScript.MSBuild NuGet paketine başvurun.

    Not

    .NET uygulamalarına paket ekleme hakkında yönergeler için, Paket tüketimi iş akışında (NuGet belgeleri)paketleri yüklemek ve yönetmek altındaki makalelere bakın. NuGet.org'da doğru paket sürümlerini onaylayın.

  2. TypeScript dosyalarını (.ts) klasörün dışına wwwroot yerleştirin. Örneğin, dosyaları bir Client klasöre yerleştirin.

  3. Klasörün TypeScript derleme çıkışını wwwroot yapılandırın. TypescriptOutDir Proje dosyasında içindeki özelliğini PropertyGroup ayarlayın:

    <TypescriptOutDir>wwwroot</TypescriptOutDir>
    
  4. Proje dosyasına aşağıdaki hedefi ekleyerek TypeScript hedefini PropertyGroup hedefin PrepareForBuildDependsOn bağımlılığı olarak ekleyin:

    <PrepareForBuildDependsOn>
      CompileTypeScript;
      GetTypeScriptOutputForPublishing;$(PrepareForBuildDependsOn)
    </PrepareForBuildDependsOn>
    

Başvuruda bulunan RCL'den içerik kullanma

RCL klasöründe yer wwwroot alan dosyalar RCL'ye veya ön ekinin _content/{PACKAGE ID}/altındaki tüketen uygulamaya sunulur. Örneğin, derleme adına Razor.Class.Lib sahip ve proje dosyasında belirtilmemiş bir <PackageId> kitaplık, konumundaki _content/Razor.Class.Lib/statik içeriğe giden bir yola neden olur. NuGet paketi oluştururken ve derleme adı paket kimliğiyle aynı olmadığında (<PackageId> kitaplığın proje dosyasında), için {PACKAGE ID}proje dosyasında belirtilen paket kimliğini kullanın.

Tüketen uygulama, kitaplık tarafından sağlanan statik varlıklara , <style>, <img>ve diğer HTML etiketleriyle <script>başvurur. Tüketen uygulamanın şu durumlarda statik dosya desteği etkinleştirilmelidir:

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();

Kullanan uygulamayı derleme çıkışından ()dotnet run çalıştırırken, geliştirme ortamında statik web varlıkları varsayılan olarak etkinleştirilir. Derleme çıkışından çalışırken diğer ortamlardaki varlıkları desteklemek için içindeki konak oluşturucusunu Program.csçağırınUseStaticWebAssets:

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();

Not: .NET 6 yalnızca çağrısı builder.WebHost.UseWebRoot("wwwroot").UseStaticWebAssetsgerektirir. Daha fazla bilgi için bu GitHub konusuna bakın.

Yayımlanan çıkıştan (dotnet publish) bir uygulama çalıştırılırken çağrı UseStaticWebAssets yapılması gerekmez.

Çok projeli geliştirme akışı

Tüketen uygulama çalıştırıldığında:

  • RCL'deki varlıklar özgün klasörlerinde kalır. Varlıklar, tüketen uygulamaya taşınmaz.
  • RCL'nin wwwroot klasöründeki tüm değişiklikler, RCL yeniden derlendikten sonra ve kullanan uygulamayı yeniden oluşturmadan tüketen uygulamaya yansıtılır.

RCL oluşturulduğunda, statik web varlığı konumlarını açıklayan bir bildirim oluşturulur. Kullanan uygulama, başvuruda bulunan proje ve paketlerdeki varlıkları kullanmak için çalışma zamanında bildirimi okur. RCL'ye yeni bir varlık eklendiğinde, tüketen bir uygulamanın yeni varlığa erişebilmesi için önce RCL'nin bildirimini güncelleştirmek için yeniden oluşturulması gerekir.

Yayımlama

Uygulama yayımlandığında, başvuruda bulunan tüm projelerin ve paketlerin wwwroot yardımcı varlıkları, altında _content/{PACKAGE ID}/yayımlanan uygulamanın klasörüne kopyalanır. NuGet paketi oluştururken ve derleme adı paket kimliğiyle (<PackageId>kitaplığın proje dosyasında) aynı değilse, yayımlanan varlıkların klasörünü incelerken wwwroot için proje dosyasında {PACKAGE ID} belirtilen paket kimliğini kullanın.

Ek kaynaklar

Razor görünümler, sayfalar, denetleyiciler, sayfa modelleri, Razor bileşenler, Görünüm bileşenleri ve veri modelleri bir Razor sınıf kitaplığında (RCL) yerleşik olarak oluşturulabilir. RCL paketlenebilir ve yeniden kullanılabilir. Uygulamalar RCL'yi içerebilir ve içerdiği görünümleri ve sayfaları geçersiz kılabilir. Hem web uygulamasında hem de RCL'de bir görünüm, kısmi görünüm veya Razor Sayfa bulunduğunda, web uygulamasındaki Razor işaretleme (.cshtml dosya) öncelikli olur.

Örnek kodu görüntüleme veya indirme (indirme)

Kullanıcı arabirimi içeren Razor bir sınıf kitaplığı oluşturma

  • Visual Studio'dan Yeni proje oluştur'u seçin.
  • Sınıf Kitaplığı>İleri'yi seçin.Razor
  • Kitaplığı adlandırın (örneğin, "RazorClassLib"), >İleri Oluştur>. Oluşturulan görünüm kitaplığıyla dosya adı çakışmasını önlemek için, kitaplık adının ile .Viewsbitmiyor olduğundan emin olun.
  • Hedef Çerçeve'yi seçin. Destek görünümlerini desteklemek için Destek sayfalarını ve görünümlerini denetleyin ☑. Varsayılan olarak, yalnızca Razor bileşenler desteklenir. Oluştur'u belirleyin.

Sınıf Razor kitaplığı (RCL) şablonu varsayılan olarak bileşen geliştirme olarak Razor kullanılır. Sayfaları ve görünümleri destekle seçeneği sayfaları ve görünümleri destekler.

RCL'ye dosya ekleyin Razor .

ASP.NET Core şablonları, RCL içeriğinin Areas klasörde olduğunu varsayar. yerine içeriğini ~/Areas/Pages~/Pages kullanıma sunan bir RCL oluşturmak için bkz. RCL Sayfaları düzeni.

RCL içeriğine başvurma

RCL'ye şu şekilde başvurabilirsiniz:

Görünümleri, kısmi görünümleri ve sayfaları geçersiz kılma

Hem web uygulamasında hem de RCL'de bir görünüm, kısmi görünüm veya Razor Sayfa bulunduğunda, web uygulamasındaki Razor işaretleme (.cshtml dosya) öncelikli olur. Örneğin, WebApp1'e ekleyin WebApp1/Areas/MyFeature/Pages/Page1.cshtml ve WebApp1'deki Sayfa1, RCL'deki Sayfa1'den önceliklidir.

Örnek indirmede, önceliği test etmek için WebApp1/Areas/MyFeature olarak yeniden adlandırınWebApp1/Areas/MyFeature2.

RazorUIClassLib/Areas/MyFeature/Pages/Shared/_Message.cshtml Kısmi görünümü öğesine WebApp1/Areas/MyFeature/Pages/Shared/_Message.cshtmlkopyalayın. İşaretlemeyi yeni konumu gösterecek şekilde güncelleştirin. Uygulamanın kısmi sürümünün kullanıldığını doğrulamak için uygulamayı derleyin ve çalıştırın.

RCL Sayfaları düzeni

Web uygulamasının Pages klasörünün bir parçası gibi RCL içeriğine başvurmak için aşağıdaki dosya yapısıyla RCL projesini oluşturun:

  • RazorUIClassLib/Pages
  • RazorUIClassLib/Pages/Shared

İki kısmi dosya içerdiğini varsayalım RazorUIClassLib/Pages/Shared : _Header.cshtml ve _Footer.cshtml. Etiketler <partial> dosyaya _Layout.cshtml eklenebilir:

<body>
  <partial name="_Header">
  @RenderBody()
  <partial name="_Footer">
</body>

_ViewStart.cshtml Dosyayı konak web uygulamasından kullanmak için RCL projesinin Pages_Layout.cshtml klasörüne ekleyin:

@{
    Layout = "_Layout";
}

Statik varlıklarla RCL oluşturma

RCL, RCL veya RCL'nin tüketen uygulaması tarafından başvurulabilen yardımcı statik varlıklar gerektirebilir. ASP.NET Core, tüketen bir uygulamanın kullanabileceği statik varlıkları içeren RCL'ler oluşturmaya olanak tanır.

Yardımcı varlıkları bir RCL'nin parçası olarak eklemek için sınıf kitaplığında bir wwwroot klasör oluşturun ve gerekli dosyaları bu klasöre ekleyin.

RCL paketlenirken, klasördeki wwwroot tüm yardımcı varlıklar otomatik olarak pakete eklenir.

dotnet pack NuGet.exe sürümü nuget packyerine komutunu kullanın.

Statik varlıkları dışlama

Statik varlıkları dışlamak için, istenen dışlama yolunu proje dosyasındaki $(DefaultItemExcludes) özellik grubuna ekleyin. Girişleri noktalı virgülle (; ) ayırın.

Aşağıdaki örnekte, lib.css klasördeki wwwroot stil sayfası statik varlık olarak kabul edilmez ve yayımlanan RCL'ye dahil edilmez:

<PropertyGroup>
  <DefaultItemExcludes>$(DefaultItemExcludes);wwwroot\lib.css</DefaultItemExcludes>
</PropertyGroup>

Typescript tümleştirmesi

TypeScript dosyalarını RCL'ye eklemek için:

  1. Projede Microsoft.TypeScript.MSBuild NuGet paketine başvurun.

    Not

    .NET uygulamalarına paket ekleme hakkında yönergeler için, Paket tüketimi iş akışında (NuGet belgeleri)paketleri yüklemek ve yönetmek altındaki makalelere bakın. NuGet.org'da doğru paket sürümlerini onaylayın.

  2. TypeScript dosyalarını (.ts) klasörün dışına wwwroot yerleştirin. Örneğin, dosyaları bir Client klasöre yerleştirin.

  3. Klasörün TypeScript derleme çıkışını wwwroot yapılandırın. TypescriptOutDir Proje dosyasında içindeki özelliğini PropertyGroup ayarlayın:

    <TypescriptOutDir>wwwroot</TypescriptOutDir>
    
  4. Proje dosyasına aşağıdaki hedefi ekleyerek TypeScript hedefini PropertyGroup hedefin ResolveCurrentProjectStaticWebAssets bağımlılığı olarak ekleyin:

    <ResolveCurrentProjectStaticWebAssetsInputsDependsOn>
      CompileTypeScript;
      $(ResolveCurrentProjectStaticWebAssetsInputs)
    </ResolveCurrentProjectStaticWebAssetsInputsDependsOn>
    

Başvuruda bulunan RCL'den içerik kullanma

RCL klasöründe yer wwwroot alan dosyalar RCL'ye veya ön ekinin _content/{PACKAGE ID}/altındaki tüketen uygulamaya sunulur. Örneğin, derleme adına Razor.Class.Lib sahip ve proje dosyasında belirtilmemiş bir <PackageId> kitaplık, konumundaki _content/Razor.Class.Lib/statik içeriğe giden bir yola neden olur. NuGet paketi oluştururken ve derleme adı paket kimliğiyle aynı olmadığında (<PackageId> kitaplığın proje dosyasında), için {PACKAGE ID}proje dosyasında belirtilen paket kimliğini kullanın.

Tüketen uygulama, kitaplık tarafından sağlanan statik varlıklara , <style>, <img>ve diğer HTML etiketleriyle <script>başvurur. Tüketen uygulamanın içinde Startup.Configurestatik dosya desteği etkinleştirilmelidir:

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    ...

    app.UseStaticFiles();

    ...
}

Kullanan uygulamayı derleme çıkışından ()dotnet run çalıştırırken, geliştirme ortamında statik web varlıkları varsayılan olarak etkinleştirilir. Derleme çıkışından çalışırken diğer ortamlardaki varlıkları desteklemek için içindeki konak oluşturucusunu Program.csçağırınUseStaticWebAssets:

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>();
            });
}

Yayımlanan çıkıştan (dotnet publish) bir uygulama çalıştırılırken çağrı UseStaticWebAssets yapılması gerekmez.

Çok projeli geliştirme akışı

Tüketen uygulama çalıştırıldığında:

  • RCL'deki varlıklar özgün klasörlerinde kalır. Varlıklar, tüketen uygulamaya taşınmaz.
  • RCL'nin wwwroot klasöründeki tüm değişiklikler, RCL yeniden derlendikten sonra ve kullanan uygulamayı yeniden oluşturmadan tüketen uygulamaya yansıtılır.

RCL oluşturulduğunda, statik web varlığı konumlarını açıklayan bir bildirim oluşturulur. Kullanan uygulama, başvuruda bulunan proje ve paketlerdeki varlıkları kullanmak için çalışma zamanında bildirimi okur. RCL'ye yeni bir varlık eklendiğinde, tüketen bir uygulamanın yeni varlığa erişebilmesi için önce RCL'nin bildirimini güncelleştirmek için yeniden oluşturulması gerekir.

Yayımlama

Uygulama yayımlandığında, başvuruda bulunan tüm projelerin ve paketlerin wwwroot yardımcı varlıkları, altında _content/{PACKAGE ID}/yayımlanan uygulamanın klasörüne kopyalanır. NuGet paketi oluştururken ve derleme adı paket kimliğiyle (<PackageId>kitaplığın proje dosyasında) aynı değilse, yayımlanan varlıkların klasörünü incelerken wwwroot için proje dosyasında {PACKAGE ID} belirtilen paket kimliğini kullanın.

Ek kaynaklar

Razor görünümler, sayfalar, denetleyiciler, sayfa modelleri, Razor bileşenler, Görünüm bileşenleri ve veri modelleri bir Razor sınıf kitaplığında (RCL) yerleşik olarak oluşturulabilir. RCL paketlenebilir ve yeniden kullanılabilir. Uygulamalar RCL'yi içerebilir ve içerdiği görünümleri ve sayfaları geçersiz kılabilir. Hem web uygulamasında hem de RCL'de bir görünüm, kısmi görünüm veya Razor Sayfa bulunduğunda, web uygulamasındaki Razor işaretleme (.cshtml dosya) öncelikli olur.

Örnek kodu görüntüleme veya indirme (indirme)

Kullanıcı arabirimi içeren Razor bir sınıf kitaplığı oluşturma

  • Visual Studio Dosya menüsünden Yeni Proje'yi> seçin.
  • ASP.NET Çekirdek Web Uygulaması'nı seçin.
  • Kitaplığı adlandırın (örneğin, "RazorClassLib") >Tamam. Oluşturulan görünüm kitaplığıyla dosya adı çakışmasını önlemek için, kitaplık adının ile .Viewsbitmiyor olduğundan emin olun.
  • ASP.NET Core 2.1 veya sonraki bir sürümün seçili olduğunu doğrulayın.
  • Sınıf Kitaplığı>Tamam'ı seçin.Razor

RCL'de aşağıdaki proje dosyası vardır:

<Project Sdk="Microsoft.NET.Sdk.Razor">

    <PropertyGroup>
        <TargetFramework>netcoreapp3.1</TargetFramework>
        <AddRazorSupportForMvc>true</AddRazorSupportForMvc>
    </PropertyGroup>

    <ItemGroup>
        <FrameworkReference Include="Microsoft.AspNetCore.App" />
    </ItemGroup>


</Project>

RCL'ye dosya ekleyin Razor .

ASP.NET Core şablonları, RCL içeriğinin Areas klasörde olduğunu varsayar. yerine içeriğini ~/Areas/Pages~/Pages kullanıma sunan bir RCL oluşturmak için bkz. RCL Sayfaları düzeni.

RCL içeriğine başvurma

RCL'ye şu şekilde başvurabilirsiniz:

İzlenecek yol: Bir RCL projesi oluşturma ve Pages projesinden Razor kullanma

Projenin tamamını indirebilir ve oluşturmak yerine test edebilirsiniz. Örnek indirme, projenin testini kolaylaştıran ek kod ve bağlantılar içerir. Bu GitHub sorununa, indirme örnekleri ve adım adım yönergeler hakkındaki yorumlarınızla ilgili geri bildirim bırakabilirsiniz.

İndirme uygulamasını test edin

Tamamlanmış uygulamayı indirmediyseniz ve izlenecek yol projesini oluşturmayı tercih ediyorsanız sonraki bölüme geçin.

.sln Dosyayı Visual Studio'da açın. Uygulamayı çalıştırma.

Test WebApp1'deki yönergeleri izleyin

RCL oluşturma

Bu bölümde bir RCL oluşturulur. Razor dosyaları RCL'ye eklenir.

RCL projesini oluşturun:

  • Visual Studio Dosya menüsünden Yeni Proje'yi> seçin.
  • ASP.NET Çekirdek Web Uygulaması'nı seçin.
  • Uygulamaya RazorUIClassLib>Ok adını verin.
  • ASP.NET Core 2.1 veya sonraki bir sürümün seçili olduğunu doğrulayın.
  • Sınıf Kitaplığı>Tamam'ı seçin.Razor
  • adlı RazorUIClassLib/Areas/MyFeature/Pages/Shared/_Message.cshtmlkısmi bir Razor görünüm dosyası ekleyin.

Projeye dosya ve klasör ekleme Razor

  • içindeki RazorUIClassLib/Areas/MyFeature/Pages/Shared/_Message.cshtml işaretlemesini aşağıdaki kodla değiştirin:

    <h3>_Message.cshtml partial view.</h3>
    
    <p>RazorUIClassLib\Areas\MyFeature\Pages\Shared\_Message.cshtml</p>
    
  • içindeki RazorUIClassLib/Areas/MyFeature/Pages/Page1.cshtml işaretlemesini aşağıdaki kodla değiştirin:

    @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 kısmi görünümü (<partial name="_Message" />) kullanmak için gereklidir. yönergesini @addTagHelper eklemek yerine bir _ViewImports.cshtml dosya ekleyebilirsiniz. Örneğin:

    dotnet new viewimports -o RazorUIClassLib/Areas/MyFeature/Pages
    

    hakkında _ViewImports.cshtmldaha fazla bilgi için bkz. Paylaşılan Yönergeleri İçeri Aktarma

  • Derleyici hatası olmadığını doğrulamak için sınıf kitaplığını oluşturun:

    dotnet build RazorUIClassLib
    

Derleme çıkışı ve RazorUIClassLib.Views.dlliçerirRazorUIClassLib.dll. RazorUIClassLib.Views.dll derlenmiş Razor içeriği içerir.

Pages projesinden RazorRazor kullanıcı arabirimi kitaplığını kullanma

Razor Sayfalar web uygulamasını oluşturun:

  • Çözüm Gezgini çözüme sağ tıklayarak Yeni Proje Ekle'ye >>tıklayın.

  • ASP.NET Çekirdek Web Uygulaması'nı seçin.

  • Uygulamaya WebApp1 adını verin.

  • ASP.NET Core 2.1 veya sonraki bir sürümün seçili olduğunu doğrulayın.

  • Web Uygulaması>Tamam'ı seçin.

  • Çözüm Gezgini WebApp1'e sağ tıklayın ve Başlangıç Projesi Olarak Ayarla'yı seçin.

  • Çözüm Gezgini WebApp1'e sağ tıklayın ve Bağımlılıkları Oluştur Proje Bağımlılıkları'na> tıklayın.

  • WebApp1 bağımlılığı olarak UIClassLib'idenetleyinRazor.

  • Çözüm Gezgini WebApp1'e sağ tıklayın ve Başvuru Ekle'yi>seçin.

  • Başvuru Yöneticisi iletişim kutusunda UIClassLib>Tamam'ı işaretleyinRazor.

Uygulamayı çalıştırma.

WebApp1'i test edin

/MyFeature/Page1 Kullanıcı arabirimi sınıf kitaplığının Razor kullanımda olduğunu doğrulamak için adresine gidin.

Görünümleri, kısmi görünümleri ve sayfaları geçersiz kılma

Hem web uygulamasında hem de RCL'de bir görünüm, kısmi görünüm veya Razor Sayfa bulunduğunda, web uygulamasındaki Razor işaretleme (.cshtml dosya) öncelikli olur. Örneğin, WebApp1'e ekleyin WebApp1/Areas/MyFeature/Pages/Page1.cshtml ve WebApp1'deki Sayfa1, RCL'deki Sayfa1'den önceliklidir.

Örnek indirmede, önceliği test etmek için WebApp1/Areas/MyFeature olarak yeniden adlandırınWebApp1/Areas/MyFeature2.

RazorUIClassLib/Areas/MyFeature/Pages/Shared/_Message.cshtml Kısmi görünümü öğesine WebApp1/Areas/MyFeature/Pages/Shared/_Message.cshtmlkopyalayın. İşaretlemeyi yeni konumu gösterecek şekilde güncelleştirin. Uygulamanın kısmi sürümünün kullanıldığını doğrulamak için uygulamayı derleyin ve çalıştırın.

RCL Sayfaları düzeni

Web uygulamasının Pages klasörünün bir parçası gibi RCL içeriğine başvurmak için aşağıdaki dosya yapısıyla RCL projesini oluşturun:

  • RazorUIClassLib/Pages
  • RazorUIClassLib/Pages/Shared

İki kısmi dosya içerdiğini varsayalım RazorUIClassLib/Pages/Shared : _Header.cshtml ve _Footer.cshtml. Etiketler <partial> dosyaya _Layout.cshtml eklenebilir:

<body>
  <partial name="_Header">
  @RenderBody()
  <partial name="_Footer">
</body>

Razor görünümler, sayfalar, denetleyiciler, sayfa modelleri, Razor bileşenler, Görünüm bileşenleri ve veri modelleri bir Razor sınıf kitaplığında (RCL) yerleşik olarak oluşturulabilir. RCL paketlenebilir ve yeniden kullanılabilir. Uygulamalar RCL'yi içerebilir ve içerdiği görünümleri ve sayfaları geçersiz kılabilir. Hem web uygulamasında hem de RCL'de bir görünüm, kısmi görünüm veya Razor Sayfa bulunduğunda, web uygulamasındaki Razor işaretleme (.cshtml dosya) öncelikli olur.

Örnek kodu görüntüleme veya indirme (indirme)

Kullanıcı arabirimi içeren Razor bir sınıf kitaplığı oluşturma

  • Visual Studio'dan Yeni proje oluştur'u seçin.
  • Sınıf Kitaplığı>İleri'yi seçin.Razor
  • Kitaplığı adlandırın (örneğin, "RazorClassLib"), >Create. Oluşturulan görünüm kitaplığıyla dosya adı çakışmasını önlemek için, kitaplık adının ile .Viewsbitmiyor olduğundan emin olun.
  • Görünümleri desteklemeniz gerekiyorsa Destek sayfaları ve görünümleri'ne tıklayın. Varsayılan olarak, yalnızca Razor Sayfalar desteklenir. Oluştur'u belirleyin.

Sınıf Razor kitaplığı (RCL) şablonu varsayılan olarak bileşen geliştirme olarak Razor kullanılır. Sayfaları ve görünümleri destekle seçeneği sayfaları ve görünümleri destekler.

RCL'ye dosya ekleyin Razor .

ASP.NET Core şablonları, RCL içeriğinin Areas klasörde olduğunu varsayar. yerine içindeki ~/Pages~/Areas/Pagesiçeriği kullanıma sunan bir RCL oluşturmak için aşağıdaki RCL Sayfaları düzenine bakın.

RCL içeriğine başvurma

RCL'ye şu şekilde başvurabilirsiniz:

Görünümleri, kısmi görünümleri ve sayfaları geçersiz kılma

Hem web uygulamasında hem de RCL'de bir görünüm, kısmi görünüm veya Razor Sayfa bulunduğunda, web uygulamasındaki Razor işaretleme (.cshtml dosya) öncelikli olur. Örneğin, WebApp1'e ekleyin WebApp1/Areas/MyFeature/Pages/Page1.cshtml ve WebApp1'deki Sayfa1, RCL'deki Sayfa1'den önceliklidir.

Örnek indirmede, önceliği test etmek için WebApp1/Areas/MyFeature olarak yeniden adlandırınWebApp1/Areas/MyFeature2.

RazorUIClassLib/Areas/MyFeature/Pages/Shared/_Message.cshtml Kısmi görünümü öğesine WebApp1/Areas/MyFeature/Pages/Shared/_Message.cshtmlkopyalayın. İşaretlemeyi yeni konumu gösterecek şekilde güncelleştirin. Uygulamanın kısmi sürümünün kullanıldığını doğrulamak için uygulamayı derleyin ve çalıştırın.

RCL Pages kullanıyorsa Razor barındırma uygulamasında Pages hizmetlerini ve uç noktalarını etkinleştirin Razor :

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 Sayfaları düzeni

Web uygulamasının Pages klasörünün bir parçası gibi RCL içeriğine başvurmak için aşağıdaki dosya yapısıyla RCL projesini oluşturun:

  • RazorUIClassLib/Pages
  • RazorUIClassLib/Pages/Shared

İki kısmi dosya içerdiğini varsayalım RazorUIClassLib/Pages/Shared : _Header.cshtml ve _Footer.cshtml. Etiketler <partial> dosyaya _Layout.cshtml eklenebilir:

<body>
  <partial name="_Header">
  @RenderBody()
  <partial name="_Footer">
</body>

_ViewStart.cshtml Dosyayı konak web uygulamasından kullanmak için RCL projesinin Pages_Layout.cshtml klasörüne ekleyin:

@{
    Layout = "_Layout";
}

Statik varlıklarla RCL oluşturma

RCL, RCL veya RCL'nin tüketen uygulaması tarafından başvurulabilen yardımcı statik varlıklar gerektirebilir. ASP.NET Core, tüketen bir uygulamanın kullanabileceği statik varlıkları içeren RCL'ler oluşturmaya olanak tanır.

Yardımcı varlıkları bir RCL'nin parçası olarak eklemek için sınıf kitaplığında bir wwwroot klasör oluşturun ve gerekli dosyaları bu klasöre ekleyin.

RCL paketlenirken, klasördeki wwwroot tüm yardımcı varlıklar otomatik olarak pakete eklenir.

dotnet pack NuGet.exe sürümü nuget packyerine komutunu kullanın.

Statik varlıkları dışlama

Statik varlıkları dışlamak için, istenen dışlama yolunu proje dosyasındaki $(DefaultItemExcludes) özellik grubuna ekleyin. Girişleri noktalı virgülle (; ) ayırın.

Aşağıdaki örnekte, lib.css klasördeki wwwroot stil sayfası statik varlık olarak kabul edilmez ve yayımlanan RCL'ye dahil edilmez:

<PropertyGroup>
  <DefaultItemExcludes>$(DefaultItemExcludes);wwwroot\lib.css</DefaultItemExcludes>
</PropertyGroup>

Typescript tümleştirmesi

TypeScript dosyalarını RCL'ye eklemek için:

  1. Projede Microsoft.TypeScript.MSBuild NuGet paketine başvurun.

    Not

    .NET uygulamalarına paket ekleme hakkında yönergeler için, Paket tüketimi iş akışında (NuGet belgeleri)paketleri yüklemek ve yönetmek altındaki makalelere bakın. NuGet.org'da doğru paket sürümlerini onaylayın.

  2. TypeScript dosyalarını (.ts) klasörün dışına wwwroot yerleştirin. Örneğin, dosyaları bir Client klasöre yerleştirin.

  3. Klasörün TypeScript derleme çıkışını wwwroot yapılandırın. TypescriptOutDir Proje dosyasında içindeki özelliğini PropertyGroup ayarlayın:

    <TypescriptOutDir>wwwroot</TypescriptOutDir>
    
  4. Proje dosyasına aşağıdaki hedefi ekleyerek TypeScript hedefini PropertyGroup hedefin ResolveCurrentProjectStaticWebAssets bağımlılığı olarak ekleyin:

    <ResolveCurrentProjectStaticWebAssetsInputsDependsOn>
      CompileTypeScript;
      $(ResolveCurrentProjectStaticWebAssetsInputs)
    </ResolveCurrentProjectStaticWebAssetsInputsDependsOn>
    

Başvuruda bulunan RCL'den içerik kullanma

RCL klasöründe yer wwwroot alan dosyalar RCL'ye veya ön ekinin _content/{PACKAGE ID}/altındaki tüketen uygulamaya sunulur. Örneğin, derleme adına Razor.Class.Lib sahip ve proje dosyasında belirtilmemiş bir <PackageId> kitaplık, konumundaki _content/Razor.Class.Lib/statik içeriğe giden bir yola neden olur. NuGet paketi oluştururken ve derleme adı paket kimliğiyle aynı olmadığında (<PackageId> kitaplığın proje dosyasında), için {PACKAGE ID}proje dosyasında belirtilen paket kimliğini kullanın.

Tüketen uygulama, kitaplık tarafından sağlanan statik varlıklara , <style>, <img>ve diğer HTML etiketleriyle <script>başvurur. Tüketen uygulamanın içinde Startup.Configurestatik dosya desteği etkinleştirilmelidir:

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    ...

    app.UseStaticFiles();

    ...
}

Kullanan uygulamayı derleme çıkışından ()dotnet run çalıştırırken, geliştirme ortamında statik web varlıkları varsayılan olarak etkinleştirilir. Derleme çıkışından çalışırken diğer ortamlardaki varlıkları desteklemek için içindeki konak oluşturucusunu Program.csçağırınUseStaticWebAssets:

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>();
            });
}

Yayımlanan çıkıştan (dotnet publish) bir uygulama çalıştırılırken çağrı UseStaticWebAssets yapılması gerekmez.

Çok projeli geliştirme akışı

Tüketen uygulama çalıştırıldığında:

  • RCL'deki varlıklar özgün klasörlerinde kalır. Varlıklar, tüketen uygulamaya taşınmaz.
  • RCL'nin wwwroot klasöründeki tüm değişiklikler, RCL yeniden derlendikten sonra ve kullanan uygulamayı yeniden oluşturmadan tüketen uygulamaya yansıtılır.

RCL oluşturulduğunda, statik web varlığı konumlarını açıklayan bir bildirim oluşturulur. Kullanan uygulama, başvuruda bulunan proje ve paketlerdeki varlıkları kullanmak için çalışma zamanında bildirimi okur. RCL'ye yeni bir varlık eklendiğinde, tüketen bir uygulamanın yeni varlığa erişebilmesi için önce RCL'nin bildirimini güncelleştirmek için yeniden oluşturulması gerekir.

Yayımlama

Uygulama yayımlandığında, başvuruda bulunan tüm projelerin ve paketlerin wwwroot yardımcı varlıkları, altında _content/{PACKAGE ID}/yayımlanan uygulamanın klasörüne kopyalanır. NuGet paketi oluştururken ve derleme adı paket kimliğiyle (<PackageId>kitaplığın proje dosyasında) aynı değilse, yayımlanan varlıkların klasörünü incelerken wwwroot için proje dosyasında {PACKAGE ID} belirtilen paket kimliğini kullanın.

Ek kaynaklar