Aracılığıyla paylaş


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

Yazan 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 RCL için derleme sürecine tümleştirme hakkında bilgi almak için, Sınıf Kitaplığınız için istemci web varlıkları oluşturmaRazor bölümüne bakın.

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

  • Visual Studio'dan Yeni proje oluştur'u seçin.
  • Razor Sınıf Kitaplığı'nı seçin>İleri.
  • Kitaplığı adlandırın (örneğin, "RazorClassLib"), >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.
  • 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'i seçin.

Razor Sınıf Kitaplığı şablonu, varsayılan olarak Razor bileşen geliştirme için ayarlanmıştır. Sayfaları ve görünümleri destekle seçeneği sayfaları ve görünümleri destekler. RCL desteği hakkında daha fazla bilgi için Blazor içindeki Razor sınıf kitaplığından ASP.NET Core Razor bileşenlerini kullanma bölümüne bakın.

RCL'ye Razor dosyaları ekleyin.

ASP.NET Core şablonları, RCL içeriğinin Areas klasörde olduğunu varsayar. Aşağıda, RCL Sayfaları düzeni'ni kullanarak, ~/Pages yerine ~/Areas/Pages içeriğini kullanıma sunan bir RCL oluşturun.

RCL içeriğine referans

RCL şu şekillerde referans alınabilir:

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/MyFeature2 öğesini WebApp1/Areas/MyFeature olarak yeniden adlandırın.

RazorUIClassLib/Areas/MyFeature/Pages/Shared/_Message.cshtml kısmi görünümü WebApp1/Areas/MyFeature/Pages/Shared/_Message.cshtml üzerine kopyalayı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 Razor Pages kullanıyorsa, barındırma uygulamasında Razor Pages hizmetlerini ve uç noktalarını etkinleştirin.

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. <partial> etiketleri _Layout.cshtml dosyasına eklenebilir.

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

_ViewStart.cshtml dosyasını, konak web uygulamasından Pages dosyasını kullanmak amacıyla, RCL projesinin _Layout.cshtml klasörüne ekleyin.

@{
    Layout = "_Layout";
}

Statik varlıklarla RCL oluşturma

RCL, hem kendi hem de RCL'yi kullanan uygulama tarafından başvurulabilecek 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 sürecine istemci web varlıklarını ekleyin

İstemci web varlıklarını derleme süreci ile bütünleştirmek oldukça karmaşık bir iştir. Daha fazla bilgi için Sınıf Kitaplığınız için istemci web varlıkları oluşturma Razor konusuna bakı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 entegrasyonu

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

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

    Note

    .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.

  • TypeScript dosyalarını .tswwwroot klasörünün dışına yerleştirin. Örneğin, dosyaları bir Client klasöre yerleştirin.

  • Proje dosyasına aşağıdaki işaretlemeyi ekleyin:

    • wwwroot özelliğiyle TypescriptOutDir klasörü için TypeScript derleme çıkışını yapılandırın.
    • TypeScript hedefini PrepareForBuildDependsOn hedefinin bağımlılığı olarak ekleyin.
    • wwwroot folder çıktısını kaldırın.
<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>

Referans edilen bir RCL'den içerik tüketmek

RCL klasöründeki wwwroot dosyalar, _content/{PACKAGE ID}/ ön eki altında RCL'ye veya tüketici uygulamaya sunulur. Örneğin, Razor.Class.Lib adlı ve proje dosyasında <PackageId> belirtilmemiş bir kitaplık, _content/Razor.Class.Lib/ konumundaki statik içerik yolunu ortaya çıkarır. Bir NuGet paketi oluştururken ve derleme adı paket kimliğiyle aynı olmadığında (<PackageId> kitaplığın proje dosyasında), {PACKAGE ID} proje dosyasında belirtilen paket kimliğini kullanın.

Tüketen uygulama, kitaplık tarafından sağlanan statik varlıklara <script>, <style>, <img> ve diğer HTML etiketleriyle 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();

Derleme çıkışından (dotnet run) uygulamayı çalıştırırken, Geliştirme ortamında statik web varlıkları varsayılan olarak etkinleştirilir. Diğer ortamlardaki varlıkları desteklemek için derleme çıktısından çalışırken, UseStaticWebAssets içinde, konak oluşturucuda Program.cs'u çağırın.

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 (UseStaticWebAssets) bir uygulama çalıştırılırken dotnet publish çağrısı yapılması gerekmez.

Çok projeli geliştirme akışı

Tüketici uygulama çalıştığı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. Uygulama, başvurulan proje ve paketlerden varlıkları kullanmak için çalışma anında manifest dosyasını okur. RCL'ye yeni bir varlık eklendiğinde, RCL'nin bildirimini güncellemek amacıyla yeniden oluşturulması gerekir, böylece tüketen bir uygulama yeni varlığa erişebilir.

Publish

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 bulunduğu klasörü incelerken {PACKAGE ID} belirtilen paket kimliğini wwwroot için proje dosyasında 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 sürecine nasıl entegre edeceğiniz hakkında bilgi edinmek için Sınıf Kitaplığınız Razor için istemci web varlıkları oluşturma kısmına bakın.

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

  • Visual Studio'dan Yeni proje oluştur'u seçin.
  • Razor Sınıf Kitaplığı'nı seçin>İleri.
  • Kitaplığı adlandırın (örneğin, "RazorClassLib"), >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.
  • 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'i seçin.

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

RCL'ye Razor dosyaları ekleyin.

ASP.NET Core şablonları, RCL içeriğinin Areas klasörde olduğunu varsayar. Aşağıda, RCL Sayfaları düzeni'ni kullanarak, ~/Pages yerine ~/Areas/Pages içeriğini kullanıma sunan bir RCL oluşturun.

RCL içeriğine referans

RCL şu şekillerde referans alınabilir:

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/MyFeature2 öğesini WebApp1/Areas/MyFeature olarak yeniden adlandırın.

RazorUIClassLib/Areas/MyFeature/Pages/Shared/_Message.cshtml kısmi görünümü WebApp1/Areas/MyFeature/Pages/Shared/_Message.cshtml üzerine kopyalayı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 Razor Pages kullanıyorsa, barındırma uygulamasında Razor Pages hizmetlerini ve uç noktalarını etkinleştirin.

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. <partial> etiketleri _Layout.cshtml dosyasına eklenebilir.

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

_ViewStart.cshtml dosyasını, konak web uygulamasından Pages dosyasını kullanmak amacıyla, RCL projesinin _Layout.cshtml klasörüne ekleyin.

@{
    Layout = "_Layout";
}

Statik varlıklarla RCL oluşturma

RCL, hem kendi hem de RCL'yi kullanan uygulama tarafından başvurulabilecek 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 entegrasyonu

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

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

    Note

    .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ı .tswwwroot klasörünün dışına yerleştirin. Örneğin, dosyaları bir Client klasöre yerleştirin.

  3. wwwroot klasörü için TypeScript derleme çıktısını yapılandırın. Proje dosyasında bir TypescriptOutDir içine PropertyGroup özelliğini ayarlayın:

    <TypescriptOutDir>wwwroot</TypescriptOutDir>
    
  4. Proje dosyasına, PrepareForBuildDependsOn içinde aşağıdaki hedefi ekleyerek PropertyGroup hedefini TypeScript hedefinin bir bağımlılığı olarak dahil edin.

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

Referans edilen bir RCL'den içerik tüketmek

RCL klasöründeki wwwroot dosyalar, _content/{PACKAGE ID}/ ön eki altında RCL'ye veya tüketici uygulamaya sunulur. Örneğin, Razor.Class.Lib adlı ve proje dosyasında <PackageId> belirtilmemiş bir kitaplık, _content/Razor.Class.Lib/ konumundaki statik içerik yolunu ortaya çıkarır. Bir NuGet paketi oluştururken ve derleme adı paket kimliğiyle aynı olmadığında (<PackageId> kitaplığın proje dosyasında), {PACKAGE ID} proje dosyasında belirtilen paket kimliğini kullanın.

Tüketen uygulama, kitaplık tarafından sağlanan statik varlıklara <script>, <style>, <img> ve diğer HTML etiketleriyle 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();

Derleme çıkışından (dotnet run) uygulamayı çalıştırırken, Geliştirme ortamında statik web varlıkları varsayılan olarak etkinleştirilir. Diğer ortamlardaki varlıkları desteklemek için derleme çıktısından çalışırken, UseStaticWebAssets içinde, konak oluşturucuda Program.cs'u çağırın.

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 (UseStaticWebAssets) bir uygulama çalıştırılırken dotnet publish çağrısı yapılması gerekmez.

Çok projeli geliştirme akışı

Tüketici uygulama çalıştığı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. Uygulama, başvurulan proje ve paketlerden varlıkları kullanmak için çalışma anında manifest dosyasını okur. RCL'ye yeni bir varlık eklendiğinde, RCL'nin bildirimini güncellemek amacıyla yeniden oluşturulması gerekir, böylece tüketen bir uygulama yeni varlığa erişebilir.

Publish

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 bulunduğu klasörü incelerken {PACKAGE ID} belirtilen paket kimliğini wwwroot için proje dosyasında 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.
  • Razor Sınıf Kitaplığı'nı seçin>İleri.
  • Kitaplığı adlandırın (örneğin, "RazorClassLib"), >Oluştur>İleri. 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. Görünümleri desteklemek için Destek sayfalarını ve görünümlerini kontrol edin. Varsayılan olarak, yalnızca Razor bileşenler desteklenir. Oluştur'i seçin.

Razor sınıf kitaplığı (RCL) şablonu, varsayılan olarak Razor bileşen geliştirmesine yöneliktir. Sayfaları ve görünümleri destekle seçeneği sayfaları ve görünümleri destekler.

RCL'ye Razor dosyaları ekleyin.

ASP.NET Core şablonları, RCL içeriğinin Areas klasörde olduğunu varsayar. Ayrıntılı bilgi için RCL Sayfaları düzeni’ne bakın, bu ~/Pages içerisindeki içeriği ~/Areas/Pages yerine kullanıma sunan bir RCL oluşturmak içindir.

RCL içeriğine referans

RCL şu şekillerde referans alınabilir:

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/MyFeature2 öğesini WebApp1/Areas/MyFeature olarak yeniden adlandırın.

RazorUIClassLib/Areas/MyFeature/Pages/Shared/_Message.cshtml kısmi görünümü WebApp1/Areas/MyFeature/Pages/Shared/_Message.cshtml üzerine kopyalayı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. <partial> etiketleri _Layout.cshtml dosyasına eklenebilir.

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

_ViewStart.cshtml dosyasını, konak web uygulamasından Pages dosyasını kullanmak amacıyla, RCL projesinin _Layout.cshtml klasörüne ekleyin.

@{
    Layout = "_Layout";
}

Statik varlıklarla RCL oluşturma

RCL, hem kendi hem de RCL'yi kullanan uygulama tarafından başvurulabilecek 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 entegrasyonu

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

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

    Note

    .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ı .tswwwroot klasörünün dışına yerleştirin. Örneğin, dosyaları bir Client klasöre yerleştirin.

  3. wwwroot klasörü için TypeScript derleme çıktısını yapılandırın. Proje dosyasında bir TypescriptOutDir içine PropertyGroup özelliğini ayarlayın:

    <TypescriptOutDir>wwwroot</TypescriptOutDir>
    
  4. Proje dosyasına, ResolveCurrentProjectStaticWebAssets içinde aşağıdaki hedefi ekleyerek PropertyGroup hedefini TypeScript hedefinin bir bağımlılığı olarak dahil edin.

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

Referans edilen bir RCL'den içerik tüketmek

RCL klasöründeki wwwroot dosyalar, _content/{PACKAGE ID}/ ön eki altında RCL'ye veya tüketici uygulamaya sunulur. Örneğin, Razor.Class.Lib adlı ve proje dosyasında <PackageId> belirtilmemiş bir kitaplık, _content/Razor.Class.Lib/ konumundaki statik içerik yolunu ortaya çıkarır. Bir NuGet paketi oluştururken ve derleme adı paket kimliğiyle aynı olmadığında (<PackageId> kitaplığın proje dosyasında), {PACKAGE ID} proje dosyasında belirtilen paket kimliğini kullanın.

Tüketen uygulama, kitaplık tarafından sağlanan statik varlıklara <script>, <style>, <img> ve diğer HTML etiketleriyle başvurur. Tüketen uygulamada statik dosya desteği etkinleştirilmiş olmalıdır.

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

    app.UseStaticFiles();

    ...
}

Derleme çıkışından (dotnet run) uygulamayı çalıştırırken, Geliştirme ortamında statik web varlıkları varsayılan olarak etkinleştirilir. Diğer ortamlardaki varlıkları desteklemek için derleme çıktısından çalışırken, UseStaticWebAssets içinde, konak oluşturucuda Program.cs'u çağırın.

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 (UseStaticWebAssets) bir uygulama çalıştırılırken dotnet publish çağrısı yapılması gerekmez.

Çok projeli geliştirme akışı

Tüketici uygulama çalıştığı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. Uygulama, başvurulan proje ve paketlerden varlıkları kullanmak için çalışma anında manifest dosyasını okur. RCL'ye yeni bir varlık eklendiğinde, RCL'nin bildirimini güncellemek amacıyla yeniden oluşturulması gerekir, böylece tüketen bir uygulama yeni varlığa erişebilir.

Publish

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 bulunduğu klasörü incelerken {PACKAGE ID} belirtilen paket kimliğini wwwroot için proje dosyasında 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.
  • Razor Sınıf Kitaplığı'nı Seç>TAMAM.

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 Razor dosyaları ekleyin.

ASP.NET Core şablonları, RCL içeriğinin Areas klasörde olduğunu varsayar. Ayrıntılı bilgi için RCL Sayfaları düzeni’ne bakın, bu ~/Pages içerisindeki içeriği ~/Areas/Pages yerine kullanıma sunan bir RCL oluşturmak içindir.

RCL içeriğine referans

RCL şu şekillerde referans alınabilir:

Adım Adım Kılavuz: Bir RCL projesi oluşturma ve Razor bir Pages projesinde 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.
  • Razor Sınıf Kitaplığı'nı Seç>TAMAM.
  • adlı Razorkısmi bir RazorUIClassLib/Areas/MyFeature/Pages/Shared/_Message.cshtml 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ışı RazorUIClassLib.dll ve RazorUIClassLib.Views.dll içerir. 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'nden >ve ardından>.

  • 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ı> seçinOK.

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

  • Çözüm Gezgini panelinden WebApp1 üzerine sağ tıklayın ve Bağımlılıkları Oluştur>Proje Bağımlılıkları seçeneğini seçin.

  • RazorUIClassLib'i WebApp1 bağımlılığı olarak denetleyin.

  • Çözüm Gezgini'nde WebApp1'e sağ tıklayın ve Ekle>'yu seçin.

  • Başvuru Yöneticisi iletişim kutusunda RazorUIClassLib> işaretleyin ve Tamam'a tıklayın.

Uygulamayı çalıştırma.

WebApp1'i test edin

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

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/MyFeature2 öğesini WebApp1/Areas/MyFeature olarak yeniden adlandırın.

RazorUIClassLib/Areas/MyFeature/Pages/Shared/_Message.cshtml kısmi görünümü WebApp1/Areas/MyFeature/Pages/Shared/_Message.cshtml üzerine kopyalayı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. <partial> etiketleri _Layout.cshtml dosyasına 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.
  • Razor Sınıf Kitaplığı'nı seçin>İleri.
  • Kitaplığı adlandırın (örneğin, "RazorClassLib"), >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.
  • 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'i seçin.

Razor sınıf kitaplığı (RCL) şablonu, varsayılan olarak Razor bileşen geliştirmesine yöneliktir. Sayfaları ve görünümleri destekle seçeneği sayfaları ve görünümleri destekler.

RCL'ye Razor dosyaları ekleyin.

ASP.NET Core şablonları, RCL içeriğinin Areas klasörde olduğunu varsayar. Aşağıda, RCL Sayfaları düzeni'ni kullanarak, ~/Pages yerine ~/Areas/Pages içeriğini kullanıma sunan bir RCL oluşturun.

RCL içeriğine referans

RCL şu şekillerde referans alınabilir:

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/MyFeature2 öğesini WebApp1/Areas/MyFeature olarak yeniden adlandırın.

RazorUIClassLib/Areas/MyFeature/Pages/Shared/_Message.cshtml kısmi görünümü WebApp1/Areas/MyFeature/Pages/Shared/_Message.cshtml üzerine kopyalayı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 Razor Pages kullanıyorsa, barındırma uygulamasında Razor Pages hizmetlerini ve uç noktalarını etkinleştirin.

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. <partial> etiketleri _Layout.cshtml dosyasına eklenebilir.

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

_ViewStart.cshtml dosyasını, konak web uygulamasından Pages dosyasını kullanmak amacıyla, RCL projesinin _Layout.cshtml klasörüne ekleyin.

@{
    Layout = "_Layout";
}

Statik varlıklarla RCL oluşturma

RCL, hem kendi hem de RCL'yi kullanan uygulama tarafından başvurulabilecek 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 entegrasyonu

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

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

    Note

    .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ı .tswwwroot klasörünün dışına yerleştirin. Örneğin, dosyaları bir Client klasöre yerleştirin.

  3. wwwroot klasörü için TypeScript derleme çıktısını yapılandırın. Proje dosyasında bir TypescriptOutDir içine PropertyGroup özelliğini ayarlayın:

    <TypescriptOutDir>wwwroot</TypescriptOutDir>
    
  4. Proje dosyasına, ResolveCurrentProjectStaticWebAssets içinde aşağıdaki hedefi ekleyerek PropertyGroup hedefini TypeScript hedefinin bir bağımlılığı olarak dahil edin.

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

Referans edilen bir RCL'den içerik tüketmek

RCL klasöründeki wwwroot dosyalar, _content/{PACKAGE ID}/ ön eki altında RCL'ye veya tüketici uygulamaya sunulur. Örneğin, Razor.Class.Lib adlı ve proje dosyasında <PackageId> belirtilmemiş bir kitaplık, _content/Razor.Class.Lib/ konumundaki statik içerik yolunu ortaya çıkarır. Bir NuGet paketi oluştururken ve derleme adı paket kimliğiyle aynı olmadığında (<PackageId> kitaplığın proje dosyasında), {PACKAGE ID} proje dosyasında belirtilen paket kimliğini kullanın.

Tüketen uygulama, kitaplık tarafından sağlanan statik varlıklara <script>, <style>, <img> ve diğer HTML etiketleriyle başvurur. Tüketen uygulamada statik dosya desteği etkinleştirilmiş olmalıdır.

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

    app.UseStaticFiles();

    ...
}

Derleme çıkışından (dotnet run) uygulamayı çalıştırırken, Geliştirme ortamında statik web varlıkları varsayılan olarak etkinleştirilir. Diğer ortamlardaki varlıkları desteklemek için derleme çıktısından çalışırken, UseStaticWebAssets içinde, konak oluşturucuda Program.cs'u çağırın.

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 (UseStaticWebAssets) bir uygulama çalıştırılırken dotnet publish çağrısı yapılması gerekmez.

Çok projeli geliştirme akışı

Tüketici uygulama çalıştığı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. Uygulama, başvurulan proje ve paketlerden varlıkları kullanmak için çalışma anında manifest dosyasını okur. RCL'ye yeni bir varlık eklendiğinde, RCL'nin bildirimini güncellemek amacıyla yeniden oluşturulması gerekir, böylece tüketen bir uygulama yeni varlığa erişebilir.

Publish

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 bulunduğu klasörü incelerken {PACKAGE ID} belirtilen paket kimliğini wwwroot için proje dosyasında kullanın.

Ek kaynaklar