Aracılığıyla paylaş


ASP.NET Core Blazor WebAssembly'yi barındırma ve dağıtma

Uyarı

Bu, bu makalenin en son sürümü değildir. Geçerli sürüm için bu makalenin .NET 9 sürümüne bakın.

Uyarı

ASP.NET Core'un bu sürümü artık desteklenmiyor. Daha fazla bilgi için bkz . .NET ve .NET Core Destek İlkesi. Geçerli sürüm için bu makalenin .NET 9 sürümüne bakın.

Önemli

Bu bilgiler, ticari olarak piyasaya sürülmeden önce önemli ölçüde değiştirilebilen bir yayın öncesi ürünle ilgilidir. Microsoft, burada sağlanan bilgilerle ilgili olarak açık veya zımni hiçbir garanti vermez.

Geçerli sürüm için bu makalenin .NET 9 sürümüne bakın.

Bu makalede Blazor WebAssembly uygulamalarını barındırma ve dağıtma açıklanmaktadır.

Barındırma modeliyleBlazor WebAssembly:

  • Uygulama Blazor , bağımlılıkları ve .NET çalışma zamanı paralel olarak tarayıcıya indirilir.
  • Uygulama doğrudan tarayıcı kullanıcı arabirimi iş parçacığında yürütülür.

Bu makale, uygulamanın statik bir barındırma web sunucusuna veya hizmetine yerleştirildiği Blazor dağıtım senaryosuyla ilgilidir; .NET, uygulamaya hizmet Blazor vermek için kullanılmaz. Bu strateji IIS, Azure hizmetleri, Apache, Nginx ve GitHub Sayfaları için bu düğümdeki tek başına dağıtım bölümünde ve diğer makalelerde ele alınmıştır.

Aşağıdaki dağıtım stratejileri desteklenir:

  • Blazor uygulaması, bir ASP.NET Core uygulaması tarafından sunulur. ASP.NET Core ile barındırılan dağıtım bölümünde bu strateji ele alınmıştır.
  • Uygulama Blazor statik bir barındırma web sunucusuna veya hizmetine yerleştirilir; burada .NET, uygulamaya hizmet Blazor vermek için kullanılmaz. Bağımsız dağıtım bölümünde açıklanan bu strateji, bir uygulamayı IIS alt uygulaması olarak barındırmayla ilgili bilgileri içerir.
  • ASP.NET Core uygulaması birden çok Blazor WebAssembly uygulama barındırıyor. Daha fazla bilgi için Birden çok barındırılan ASP.NET Core Blazor WebAssembly uygulaması konusuna bakın.

Alt alan adı ve IIS alt uygulama barındırma

Alt etki alanı barındırma, uygulamanın özel yapılandırılmasını gerektirmez. Uygulamayı bir alt etki alanında barındırmak için uygulamanın temel yolunu ( etiketini içinde) yapılandırmanız <base>.

IIS alt uygulama barındırma, uygulama temel yolunu ayarlamanızı gerektirir. IIS alt uygulama barındırma hakkında daha fazla bilgi ve ek kılavuzlar için ilişkili bağlantılar için bkz ASP.NET Core'u Blazorbarındırma ve dağıtma.

Bazı mobil cihaz tarayıcıları için en büyük yığın boyutunu azaltma

İstemcide çalışan (Blazor veya tek başına .Client uygulamanın projesi) ve mobil cihaz tarayıcılarını, özellikle iOS'ta Safari'yi hedefleyen bir Blazor Web App uygulama oluştururken, MSBuild özelliği Blazor WebAssembly kullanılarak uygulama için maksimum belleği azaltmak gerekebilir. Varsayılan değer 2.147.483.648 bayttır; bu değer çok büyük olabilir ve tarayıcı daha fazla bellek tahsis etmeyi başaramazsa, uygulama daha fazla bellek talep etmeye çalıştığında uygulamanın kilitlenmesine neden olabilir. Aşağıdaki örnek, dosyadaki değeri 268.435.456 bayt Program olarak ayarlar:

Mobil cihaz tarayıcılarını, özellikle de iOS'ta Safari'yi hedefleyen bir Blazor WebAssembly uygulama oluştururken, MSBuild özelliğine EmccMaximumHeapSize sahip uygulama için maksimum belleğin azaltılması gerekebilir. Varsayılan değer 2.147.483.648 bayttır; bu değer çok büyük olabilir ve tarayıcı daha fazla bellek tahsis etmeyi başaramazsa, uygulama daha fazla bellek talep etmeye çalıştığında uygulamanın kilitlenmesine neden olabilir. Aşağıdaki örnek, dosyadaki değeri 268.435.456 bayt Program olarak ayarlar:

<EmccMaximumHeapSize>268435456</EmccMaximumHeapSize>

Mono/WebAssembly MSBuild özellikleri ve hedefleri hakkında daha fazla bilgi için .

.NET derlemeleri için webcil paketleme biçimi

Webcil , kısıtlayıcı ağ ortamlarında kullanımı Blazor WebAssembly etkinleştirmek üzere tasarlanmış .NET derlemeleri için web dostu bir paketleme biçimidir. Webcil dosyaları, derlemelerin WebAssembly dosyaları olarak dağıtıldığı ve bu dosyaların standart .wasm dosya uzantısını kullandığı standart bir WebAssembly sarmalayıcı kullanır.

Webcil, bir Blazor WebAssembly uygulama yayımladığınızda varsayılan paketleme biçimidir. Webcil kullanımını devre dışı bırakmak için uygulamanın proje dosyasında aşağıdaki MSBuild özelliğini ayarlayın:

<PropertyGroup>
  <WasmEnableWebcil>false</WasmEnableWebcil>
</PropertyGroup>

Önyükleme kaynaklarının yüklenme şeklini özelleştirme

Önyükleme kaynaklarının nasıl yükleneceğini API loadBootResource kullanarak özelleştirin. Daha fazla bilgi için bkz . ASP.NET Core Blazor başlatma.

Sıkıştırma

Bir Blazor WebAssembly uygulama yayımlandığında, uygulamanın boyutunu küçültmek ve çalışma zamanı sıkıştırma ek yükünü kaldırmak için çıkış yayımlama sırasında statik olarak sıkıştırılır. Aşağıdaki sıkıştırma algoritmaları kullanılır:

Blazor uygun sıkıştırılmış dosyaları sunmak için ana bilgisayara güvenir. Tek başına bir Blazor WebAssembly uygulama barındırırken, statik olarak sıkıştırılmış dosyaların sunulduğundan emin olmak için ek çalışma gerekebilir:

Blazor uygun sıkıştırılmış dosyaları sunmak için ana bilgisayara güvenir. ASP.NET Core Barındırılan bir proje kullanıldığında, konak proje içerik müzakeresi gerçekleştirebilir ve statik olarak sıkıştırılmış dosyaları sunabilir. Tek başına bir Blazor WebAssembly uygulama barındırırken, statik olarak sıkıştırılmış dosyaların sunulduğundan emin olmak için ek çalışma gerekebilir:

  • IIS web.config sıkıştırma yapılandırması için IIS: Brotli ve Gzip sıkıştırma bölümüne bakın.
  • Statik olarak sıkıştırılmış dosya içeriği müzakeresini desteklemeyen statik barındırma çözümlerinde barındırma yaparken, uygulamanızı Brotli sıkıştırılmış dosyaları alıp çözümleyecek şekilde yapılandırmayı göz önünde bulundurun.

JavaScript Brotli çözücüsünü GitHub deposundan edinin. Küçültüldü kod çözücü dosyası adlandırılır decode.min.js ve deponun js klasöründe bulunur.

Uyarı

Betiğin decode.js (decode.min.js) küçültülmüş sürümü başarısız olursa, bunun yerine küçültülmemiş sürümü (decode.js) kullanmayı deneyin.

Uygulamayı kod çözücüsü kullanacak şekilde güncelleştirin.

wwwroot/index.html dosyasında, autostart'nin false etiketine Blazor'i <script> olarak ayarlayın.

<script src="_framework/blazor.webassembly.js" autostart="false"></script>

Blazor etiketinden sonra ve kapanış <script> etiketinden önce, aşağıdaki JavaScript kod bloğunu </body> ekleyin. Aşağıdaki işlev, tarayıcının önbelleğini güncel tutmak için fetch ile cache: 'no-cache' çağırır.

Blazor Web App:

<script type="module">
  import { BrotliDecode } from './decode.min.js';
  Blazor.start({
    webAssembly: {
      loadBootResource: function (type, name, defaultUri, integrity) {
        if (type !== 'dotnetjs' && location.hostname !== 'localhost' && type !== 'configuration' && type !== 'manifest') {
          return (async function () {
            const response = await fetch(defaultUri + '.br', { cache: 'no-cache' });
            if (!response.ok) {
              throw new Error(response.statusText);
            }
            const originalResponseBuffer = await response.arrayBuffer();
            const originalResponseArray = new Int8Array(originalResponseBuffer);
            const decompressedResponseArray = BrotliDecode(originalResponseArray);
            const contentType = type === 
              'dotnetwasm' ? 'application/wasm' : 'application/octet-stream';
            return new Response(decompressedResponseArray, 
              { headers: { 'content-type': contentType } });
          })();
        }
      }
    }
  });
</script>

Bağımsız Blazor WebAssembly:

<script type="module">
  import { BrotliDecode } from './decode.min.js';
  Blazor.start({
    loadBootResource: function (type, name, defaultUri, integrity) {
      if (type !== 'dotnetjs' && location.hostname !== 'localhost' && type !== 'configuration') {
        return (async function () {
          const response = await fetch(defaultUri + '.br', { cache: 'no-cache' });
          if (!response.ok) {
            throw new Error(response.statusText);
          }
          const originalResponseBuffer = await response.arrayBuffer();
          const originalResponseArray = new Int8Array(originalResponseBuffer);
          const decompressedResponseArray = BrotliDecode(originalResponseArray);
          const contentType = type === 
            'dotnetwasm' ? 'application/wasm' : 'application/octet-stream';
          return new Response(decompressedResponseArray, 
            { headers: { 'content-type': contentType } });
        })();
      }
    }
  });
</script>

Önyükleme kaynaklarını yükleme hakkında daha fazla bilgi için bkz: ASP.NET Core Blazor başlangıç.

Sıkıştırmayı CompressionEnabled devre dışı bırakmak için UYGULAMANıN proje dosyasına MSBuild özelliğini ekleyin ve değerini olarak falseayarlayın:

<PropertyGroup>
  <CompressionEnabled>false</CompressionEnabled>
</PropertyGroup>

Komut kabuğunda ` CompressionEnabled ` komutuna, ` dotnet publish ` özelliği aşağıdaki söz dizimi ile geçirilebilir.

dotnet publish -p:CompressionEnabled=false

Sıkıştırmayı BlazorEnableCompression devre dışı bırakmak için UYGULAMANıN proje dosyasına MSBuild özelliğini ekleyin ve değerini olarak falseayarlayın:

<PropertyGroup>
  <BlazorEnableCompression>false</BlazorEnableCompression>
</PropertyGroup>

Komut kabuğunda ` BlazorEnableCompression ` komutuna, ` dotnet publish ` özelliği aşağıdaki söz dizimi ile geçirilebilir.

dotnet publish -p:BlazorEnableCompression=false

Doğru yönlendirme için URL'leri yeniden yazma

Bir Blazor WebAssembly uygulamadaki sayfa bileşenleri için yönlendirme istekleri, bir uygulamadaki Blazor Server yönlendirme istekleri kadar basit değildir. İki bileşeni olan bir Blazor WebAssembly uygulamayı göz önünde bulundurun:

  • Main.razor: Uygulamanın kökünde yüklenir ve About bileşenine (href="About") bir bağlantı içerir.
  • About.razor: About bileşeni.

Tarayıcının adres çubuğu kullanılarak uygulamanın varsayılan belgesi istendiğinde (örneğin, https://www.contoso.com/):

  1. Tarayıcı bir istekte bulunur.
  2. Varsayılan sayfa döndürülür ve bu genellikle index.htmlşeklindedir.
  3. index.html uygulamayı başlatır.
  4. Router bileşen yüklenir ve RazorMain bileşen render edilir.

Ana sayfada, About bileşeninin bağlantısını seçmek istemcide çalışır çünkü Blazor yönlendirici, tarayıcının www.contoso.com için İnternet'te About istekte bulunmasını durdurur ve işlenen About bileşene kendisi hizmet eder. Uygulama içindeki Blazor WebAssembly iç uç noktalara yönelik tüm istekler aynı şekilde çalışır: İstekler, İnternet'te sunucu tarafından barındırılan kaynaklara yönelik tarayıcı tabanlı istekleri tetiklemez. Yönlendirici talepleri dahili olarak yönetir.

için tarayıcının adres çubuğu www.contoso.com/Aboutkullanılarak bir istek yapılırsa istek başarısız olur. Uygulamanın İnternet ana bilgisayarında böyle bir kaynak olmadığından 404 - Bulunamadı yanıtı döndürülür.

Tarayıcılar istemci tarafı sayfalar için İnternet tabanlı konaklara istekte bulunacağından, web sunucuları ve barındırma hizmetleri sunucuda fiziksel olarak olmayan kaynaklara yönelik tüm istekleri sayfaya index.html yeniden yazmalıdır. index.html döndürüldüğünde, uygulamanın Blazor yönlendiricisi devralır ve doğru kaynakla yanıt verir.

IIS sunucusuna dağıtım yaparken, url yeniden yazma modülünü uygulamanın yayımlanan web.config dosyasıyla kullanabilirsiniz. Daha fazla bilgi için bkz. IIS ile ASP.NET Core'u Blazor WebAssembly barındırma ve dağıtma.

ASP.NET Core ile barındırılan dağıtım

Barındırılan dağıtım, tarayıcılara web sunucusunda çalışan bir Blazor WebAssembly uygulaması sunar.

İstemci Blazor WebAssembly uygulaması, sunucu uygulamasının /bin/Release/{TARGET FRAMEWORK}/publish/wwwroot diğer statik web varlıklarıyla birlikte sunucu uygulamasının klasörüne yayımlanır. İki uygulama birlikte dağıtılır. ASP.NET Core uygulaması barındırabilen bir web sunucusu gereklidir. Barındırılan bir dağıtım için, Visual Studio, Blazor WebAssembly Uygulama projesi şablonunu (blazorwasm komutu kullanıldığında dotnet new şablon) ve Hosted seçeneği seçili olarak (-ho|--hosted komutu kullanıldığında dotnet new) içerir.

Daha fazla bilgi için aşağıdaki makalelere bakın:

Belirli bir platform için çerçeveye bağımlı yürütülebilir dosyanın barındırılan dağıtımı

Barındırılan Blazor WebAssembly bir uygulamayı belirli bir platform (bağımsız olmayan) için çerçeveye bağımlı yürütülebilir dosya olarak dağıtmak için, kullanımdaki araçlara bağlı olarak aşağıdaki yönergeleri kullanın.

Visual Studio

Kendi kendine yeterli bir dağıtım, oluşturulmuş bir yayın profili için yapılandırılır (.pubxml). Projenin yayımlama profilinin Server olarak ayarlanmış MSBuild özelliğini içerdiğini <SelfContained>falseonaylayın.

Projenin .pubxml klasöründeki ServerProperties yayımlama profili dosyasında:

<SelfContained>false</SelfContained>

Çalışma Zamanı Tanımlayıcısını (RID), Yayımlama UI'sında bulunan Ayarlar alanındaki Hedef Çalışma Zamanı ayarını kullanarak ayarlayın, bu, yayımlama profilinde MSBuild özelliğini oluşturur.

<RuntimeIdentifier>{RID}</RuntimeIdentifier>

Önceki yapılandırmada {RID} yer tutucu, Çalışma Zamanı Tanımlayıcısı (RID)'dir.

Server Projeyi Yayın yapılandırmasında yayımlayın.

Uyarı

.NET CLI kullanarak yayın profili ayarları ile bir uygulama yayımlamak mümkündür. Bunu yapmak için, `/p:PublishProfile={PROFILE}` yer tutucusu profil olacak şekilde `dotnet publish` komutuna `` geçirmeniz yeterlidir. Daha fazla bilgi için, ASP.NET Core uygulama dağıtımı için Visual Studio yayımlama profilleri (.pubxml) makalesindeki Profilleri yayımlama ve Klasör yayımlama örneği bölümlerine bakın. RID'yi dotnet publish geçirirseniz, MSBuild özelliğini () /p:RuntimeIdentifier seçeneğiyle değil komutu ile kullanın.

.NET CLI

Projenin proje dosyasında MSBuild özelliğini <SelfContained> olarak ayarlayarak <PropertyGroup> bir dağıtım yapılandırın:

<SelfContained>false</SelfContained>

Önemli

SelfContained özelliği projenin proje dosyasına yerleştirilmelidirServer. dotnet publish seçeneği veya MSBuild özelliği kullanılarak --no-self-contained/p:SelfContained=false komutuyla, özellik doğru bir şekilde ayarlanamaz.

Aşağıdaki yaklaşımlardan birini kullanarak Çalışma Zamanı Tanımlayıcısı'nı (RID) ayarlayın:

  • Seçenek 1: RID'yi, projenin <PropertyGroup> içindeki Server proje dosyasında ayarlayın.

    <RuntimeIdentifier>{RID}</RuntimeIdentifier>
    

    Önceki yapılandırmada {RID} yer tutucu, Çalışma Zamanı Tanımlayıcısı (RID)'dir.

    Uygulamayı Yayın yapılandırmasında Server projesinden yayımlayın.

    dotnet publish -c Release
    
  • Seçenek 2: RID'yi komutunda MSBuild özelliği () olarak geçirin, seçeneğini kullanarak değil.

    dotnet publish -c Release /p:RuntimeIdentifier={RID}
    

    Yukarıdaki komutta {RID} yer tutucu Çalışma Zamanı Tanımlayıcısı (RID)'dir.

Daha fazla bilgi için aşağıdaki makalelere bakın:

Bağımsız dağıtım

Tek başına dağıtım, uygulamayı doğrudan istemcilerin talep ettiği bir dizi statik dosya olarak sunar. Herhangi bir statik dosya sunucusu Blazor uygulamasını sunabilir.

Bağımsız dağıtım varlıkları, /bin/Release/{TARGET FRAMEWORK}/publish/wwwroot yer tutucusunun hedef çerçeve olduğu bin/Release/{TARGET FRAMEWORK}/browser-wasm/publish veya {TARGET FRAMEWORK} klasörüne yayımlanır.

Azure App Service

Blazor WebAssembly uygulamalar, uygulamayı IIS'de barındıran Windows üzerinde Azure App Services'e dağıtılabilir.

Linux için Azure Uygulaması Hizmeti'ne tek başına Blazor WebAssembly uygulama dağıtma şu anda desteklenmiyor. Bu senaryoyu destekleyen Blazor WebAssembly uygulamanın Azure Static Web Apps kullanarak tek başına barındırılmasını öneririz.

Docker ile tek başına

Bağımsız bir Blazor WebAssembly uygulama, statik dosya sunucusunda barındırılmak üzere bir dizi statik dosya olarak yayımlanır.

Uygulamayı Docker'da barındırmak için:

  • Nginx veya Apache gibi web sunucusu desteğine sahip bir Docker kapsayıcısı seçin.
  • publish Klasör varlıklarını, statik dosyalara hizmet vermek için web sunucusunda tanımlanan bir konum klasörüne kopyalayın.
  • Blazor WebAssembly uygulamasına hizmet vermek için gerekli ek yapılandırmayı uygulayın.

Yapılandırma yönergeleri için aşağıdaki kaynaklara bakın:

Sunucu yapılandırma değerleri

Blazor WebAssembly uygulamalar, geliştirme ortamında çalışma zamanı sırasında komut satırı bağımsız değişkenleri olarak aşağıdaki konak yapılandırma değerlerini kabul edebilir.

İçerik kökü

bağımsız değişkeni, --contentroot uygulamanın içerik dosyalarını (içerik kökü) içeren dizinin mutlak yolunu ayarlar. Aşağıdaki örneklerde uygulamanın /content-root-path içerik kök yolu verilmiştir.

  • Uygulamayı komut satırında yerel olarak çalıştırırken argümanını verin. Uygulamanın dizininden şu komutu yürütebilirsiniz:

    dotnet watch --contentroot=/content-root-path
    
  • IIS Express profilinde uygulamanın launchSettings.json dosyasına bir girdi ekleyin. Bu ayar, uygulama Visual Studio Hata Ayıklayıcısı ile çalıştırıldığında ve (veya dotnet watch) ile dotnet run bir komut isteminden çalıştırıldığında kullanılır.

    "commandLineArgs": "--contentroot=/content-root-path"
    
  • Visual Studio'da, Özellikler>Hata Ayıklama>Uygulama bağımsız değişkenleri altında bağımsız değişkenini belirtin. Visual Studio özellik sayfasında bağımsız değişkenin ayarlanması, bağımsız değişkeni launchSettings.json dosyasına ekler.

    --contentroot=/content-root-path
    

Yol temeli

--pathbase bağımsız değişkeni, kök olmayan bir göreli URL yoluyla yerel olarak çalıştırılan bir uygulamanın temel yolunu ayarlar (<base> etiket href, hazırlık ve canlı ortamda / dışında başka bir yola ayarlanır). Aşağıdaki örneklerde uygulamanın /relative-URL-path yol tabanı verilmiştir. Daha fazla bilgi için bkz. ASP.NET Core Blazor uygulama temel yolu.

Önemli

href <base> etiketinin sağlandığı yoldan farklı olarak, / bağımsız değişken değerini geçirirken sondaki eğik çizgiyi (--pathbase) eklemeyin. Uygulama temel yolu etikette <base> olarak <base href="/CoolApp/"> verilmişse (sondaki eğik çizgi içeriyorsa), komut satırı bağımsız değişken değerini --pathbase=/CoolApp şeklinde geçirin (sondaki eğik çizgi yok).

  • Uygulamayı komut satırında yerel olarak çalıştırırken argümanını verin. Uygulamanın dizininden şu komutu yürütebilirsiniz:

    dotnet watch --pathbase=/relative-URL-path
    
  • IIS Express profilinde uygulamanın launchSettings.json dosyasına bir girdi ekleyin. Bu ayar, uygulamayı Visual Studio Hata Ayıklayıcısı ile çalıştırırken veya bir komut isteminden dotnet watch (veya dotnet run) ile kullandığınızda kullanılır.

    "commandLineArgs": "--pathbase=/relative-URL-path"
    
  • Visual Studio'da, Özellikler>Hata Ayıklama>Uygulama bağımsız değişkenleri altında bağımsız değişkenini belirtin. Visual Studio özellik sayfasında bağımsız değişkenin ayarlanması, bağımsız değişkeni launchSettings.json dosyasına ekler.

    --pathbase=/relative-URL-path
    

Daha fazla bilgi için bkz. ASP.NET Core Blazor uygulama temel yolu.

URL'ler

--urls bağımsız değişkeni, istekleri dinlemek için protokoller ve bağlantı noktalarıyla birlikte IP adreslerini veya konak adreslerini ayarlar.

  • Uygulamayı komut satırında yerel olarak çalıştırırken argümanını verin. Uygulamanın dizininden şu komutu yürütebilirsiniz:

    dotnet watch --urls=http://127.0.0.1:0
    
  • IIS Express profilinde uygulamanın launchSettings.json dosyasına bir girdi ekleyin. Bu ayar, uygulamayı Visual Studio Hata Ayıklayıcısı ile çalıştırırken veya bir komut isteminden dotnet watch (veya dotnet run) ile kullandığınızda kullanılır.

    "commandLineArgs": "--urls=http://127.0.0.1:0"
    
  • Visual Studio'da, Özellikler>Hata Ayıklama>Uygulama bağımsız değişkenleri altında bağımsız değişkenini belirtin. Visual Studio özellik sayfasında bağımsız değişkenin ayarlanması, bağımsız değişkeni launchSettings.json dosyasına ekler.

    --urls=http://127.0.0.1:0
    

Kesiciyi yapılandırma

Blazor çıkış derlemelerindeki gereksiz Ara Dil (IL) öğelerini kaldırmak için her Release derlemesinde IL kırpması gerçekleştirir. Daha fazla bilgi için bkz ASP.NET Core için Düzeltici'yi YapılandırmaBlazor.

Bağlayıcıyı yapılandırın

Blazor Her Yayın derlemesinde Ara Dil (IL) bağlantısı gerçekleştirerek çıkış derlemelerdeki gereksiz IL'yi kaldırır. Daha fazla bilgi için bkz . ASP.NET Core Blazoriçin Bağlayıcıyı Yapılandırma.

DLL dosyalarının dosya adı uzantısını değiştirme

Bu bölüm .NET 5 ile .NET 7 arasında geçerlidir. .NET 8 veya sonraki sürümlerinde.NET derlemeleri Webcil dosya biçimi kullanılarak WebAssembly dosyaları (.wasm) olarak dağıtılır.

Bir güvenlik duvarı, virüsten koruma programı veya ağ güvenlik gereci uygulamanın dinamik bağlantı kitaplığı (DLL) dosyalarının (.dll ) iletimini engelliyorsa, uygulamanın yayımlanan DLL dosyalarının dosya adı uzantılarını değiştirmek için bu bölümdeki yönergeleri izleyebilirsiniz.

Birçok güvenlik sistemi yalnızca dosya uzantılarını denetlemek yerine uygulama dosyalarının içeriğini taradığından, uygulamanın DLL dosyalarının dosya adı uzantılarını değiştirmek sorunu çözmeyebilir.

DLL dosyalarının indirilmesini ve yürütülmesini engelleyen ortamlarda daha sağlam bir yaklaşım için aşağıdaki yaklaşımlardan birini kullanın:

  • .NET derlemelerini .wasm dosya biçimini kullanarak WebAssembly dosyaları () olarak paketleyen .NET 8 veya sonraki bir sürümü kullanın. Daha fazla bilgi için, bu makalenin .NET 8 veya sonraki bir sürümünün .NET derlemeleri için Webcil paketleme biçimi bölümüne bakın.
  • .NET 6 veya sonraki sürümlerinde özel dağıtım düzeni kullanın.

Bu sorunla başa çıkmak için üçüncü taraf yaklaşımlar mevcuttur. Daha fazla bilgi için Awesome Blazorkonumundaki kaynaklara bakın.

Uygulamayı yayımladıktan sonra, uygulamanın yayımlanan çıktısının dizinindeki .dll dosyalarını farklı bir dosya uzantısı kullanacak şekilde yeniden adlandırmak için bir kabuk betiği veya DevOps derleme işlem hattı kullanın.

Aşağıdaki örneklerde:

  • PowerShell (PS), dosya uzantılarını güncelleştirmek için kullanılır.
  • .dll dosyaları, komut satırından dosya uzantısını .bin kullanacak şekilde yeniden adlandırılır.
  • Yayımlanmış Blazor önyükleme bildiriminde .dll dosya uzantısına sahip olarak listelenen dosyaların uzantıları .bin olarak güncellenir.
  • Hizmet çalışanı varlıkları da kullanılıyorsa, PowerShell komutu .dll dosyasında listelenen dosyaları service-worker-assets.js dosya uzantısına günceller.

Farklı bir dosya uzantısı kullanmak için aşağıdaki komutlarda .bin'i istediğiniz uzantıyla değiştirin.

Aşağıdaki komutlarda, {PATH} yer tutucu, _framework yayımlanan publish klasörünün yolu anlamına gelir.

Klasördeki dosya uzantılarını yeniden adlandırın:

dir {PATH} | rename-item -NewName { $_.name -replace ".dll\b",".bin" }

Dosyadaki dosya uzantılarını yeniden adlandırın blazor.boot.json :

((Get-Content {PATH}\blazor.boot.json -Raw) -replace '.dll"','.bin"') | Set-Content {PATH}\blazor.boot.json

Uygulama bir Aşamalı Web Uygulaması (PWA) olduğundan hizmet çalışanı varlıkları da kullanılıyorsa:

((Get-Content {PATH}\service-worker-assets.js -Raw) -replace '.dll"','.bin"') | Set-Content {PATH}\service-worker-assets.js

Yukarıdaki komutta {PATH} yer tutucu, yayımlanan service-worker-assets.js dosyanın yoludur.

Sıkıştırılmış blazor.boot.json dosyayı ele almak için aşağıdaki yaklaşımlardan birini benimseyin:

  • Güncelleştirilmiş blazor.boot.json dosyayı yeniden sıkıştırarak yeni blazor.boot.json.gz ve blazor.boot.json.br dosyalar oluşturun. (Önerilen)
  • Sıkıştırılmış blazor.boot.json.gz ve blazor.boot.json.br dosyaları kaldırın. (Sıkıştırma bu yaklaşımla devre dışı bırakılmıştır.)

Aşamalı Web Uygulaması'nın (PWA) sıkıştırılmış service-worker-assets.js dosyası için aşağıdaki yaklaşımlardan birini benimseyin:

  • Güncelleştirilmiş service-worker-assets.js dosyayı yeniden sıkıştırarak yeni service-worker-assets.js.br ve service-worker-assets.js.gz dosyalar oluşturun. (Önerilen)
  • Sıkıştırılmış service-worker-assets.js.gz ve service-worker-assets.js.br dosyaları kaldırın. (Sıkıştırma bu yaklaşımla devre dışı bırakılmıştır.)

.NET 6/7'de Windows'ta uzantı değişikliğini otomatikleştirmek için aşağıdaki yaklaşımda projenin köküne yerleştirilen bir PowerShell betiği kullanılır. Sıkıştırmayı devre dışı bırakan aşağıdaki betik, uygulama blazor.boot.json ise service-worker-assets.js dosyasını ve dosyasını yeniden sıkıştırmak istemeniz durumunda daha fazla değişiklik için temel oluşturur. Klasörün yolu, publish klasörü betik yürütüldüğünde aktarılır.

ChangeDLLExtensions.ps1::

param([string]$filepath)
dir $filepath\wwwroot\_framework | rename-item -NewName { $_.name -replace ".dll\b",".bin" }
((Get-Content $filepath\wwwroot\_framework\blazor.boot.json -Raw) -replace '.dll"','.bin"') | Set-Content $filepath\wwwroot\_framework\blazor.boot.json
Remove-Item $filepath\wwwroot\_framework\blazor.boot.json.gz
Remove-Item $filepath\wwwroot\_framework\blazor.boot.json.br

Uygulama bir Aşamalı Web Uygulaması (PWA) olduğundan hizmet çalışanı varlıkları da kullanılıyorsa aşağıdaki komutları ekleyin:

((Get-Content $filepath\wwwroot\service-worker-assets.js -Raw) -replace '.dll"','.bin"') | Set-Content $filepath\wwwroot\service-worker-assets.js
Remove-Item $filepath\wwwroot\service-worker-assets.js.gz
Remove-Item $filepath\wwwroot\service-worker-assets.js.br

Proje dosyasında, Release yapılandırma için uygulama yayımlandıktan sonra komut dosyası yürütülür.

<Target Name="ChangeDLLFileExtensions" AfterTargets="AfterPublish" Condition="'$(Configuration)'=='Release'">
  <Exec Command="powershell.exe -command &quot;&amp; {.\ChangeDLLExtensions.ps1 '$(SolutionDir)'}&quot;" />
</Target>

Uygulamayı yayımladıktan sonra, blazor.boot.json ve service-worker-assets.js kullanıldıysa, sıkıştırmayı yeniden etkinleştirmek için elle yeniden sıkıştırın.

Uyarı

Aynı derlemeleri yeniden adlandırırken ve yavaş yüklerken, ASP.NET Core'daki Blazor WebAssemblyGecikmeli yük derlemeleri kılavuzuna bakın.

Genellikle, uygulamanın sunucusu güncelleştirilmiş uzantıya sahip dosyaları sunmak için statik varlık yapılandırması gerektirir. IIS tarafından barındırılan bir uygulama için, özel <mimeMap> bir dosyadaki statik içerik bölümünde (<staticContent>) yeni dosya uzantısı için bir MIME eşleme girdisi (web.config) ekleyin. Aşağıdaki örnek, dosya uzantısının .dll'den .bin'e değiştirildiğini varsayar:

<staticContent>
  ...
  <mimeMap fileExtension=".bin" mimeType="application/octet-stream" />
  ...
</staticContent>

Sıkıştırma kullanılıyorsa sıkıştırılmış dosyalar için bir güncelleştirme ekleyin:

<mimeMap fileExtension=".bin.br" mimeType="application/octet-stream" />
<mimeMap fileExtension=".bin.gz" mimeType="application/octet-stream" />

Dosya uzantısının girdisini .dll kaldırın:

- <mimeMap fileExtension=".dll" mimeType="application/octet-stream" />

Sıkıştırma kullanılıyorsa, sıkıştırılmış dosyalar için girişleri kaldırın:

- <mimeMap fileExtension=".dll.br" mimeType="application/octet-stream" />
- <mimeMap fileExtension=".dll.gz" mimeType="application/octet-stream" />

Özel web.config dosyalar hakkında daha fazla bilgi için Özel web.configdosyalar kullanma bölümüne bakın.

Önceki dağıtım bozulması

Genellikle kurulum sırasında

  • Yalnızca değiştirilen dosyalar değiştirilir ve bu da genellikle daha hızlı bir dağıtıma neden olur.
  • Yeni dağıtımın parçası olmayan mevcut dosyalar, yeni dağıtım tarafından kullanılmak üzere yerinde bırakılır.

Nadir durumlarda, önceki bir dağıtımda kalan dosyalar yeni bir dağıtımı bozabilir. Mevcut dağıtımın (veya dağıtımdan önce yerel olarak yayımlanan uygulamanın) tamamen silinmesi, bozuk bir dağıtımla ilgili sorunu çözebilir. Genellikle, var olan dağıtımı bir kez silmek, DevOps derlemesi ve dağıtım işlem hattı da dahil olmak üzere sorunu çözmek için yeterlidir.

DevOps derleme ve dağıtım işlem hattı kullanımdayken her zaman önceki bir dağıtımı temizlemenin gerekli olduğunu belirlerseniz, bozulmanın tam nedenini giderene kadar derleme işlem hattına geçici olarak bir adım ekleyerek her yeni dağıtımın önceki dağıtımını silebilirsiniz.