Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
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.
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 false
ayarlayı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 false
ayarlayı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 veAbout
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/
):
- Tarayıcı bir istekte bulunur.
- Varsayılan sayfa döndürülür ve bu genellikle
index.html
şeklindedir. -
index.html
uygulamayı başlatır. -
Router bileşen yüklenir ve Razor
Main
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/About
kullanı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:
- ASP.NET Core uygulaması barındırma ve dağıtma: ASP.NET Core'u barındırma ve dağıtma
- Azure Uygulaması Hizmetine Dağıtım: Visual Studio ile Azure'da ASP.NET Core uygulaması yayımlama
- Blazor proje şablonları: ASP.NET Temel Blazor proje yapısı
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>
false
onaylayı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:
- Nginx veya Apache makaleleri
- Docker Belgeleri
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 (veyadotnet watch
) iledotnet 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 istemindendotnet watch
(veyadotnet 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 istemindendotnet watch
(veyadotnet 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 yeniblazor.boot.json.gz
veblazor.boot.json.br
dosyalar oluşturun. (Önerilen) - Sıkıştırılmış
blazor.boot.json.gz
veblazor.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 yeniservice-worker-assets.js.br
veservice-worker-assets.js.gz
dosyalar oluşturun. (Önerilen) - Sıkıştırılmış
service-worker-assets.js.gz
veservice-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 "& {.\ChangeDLLExtensions.ps1 '$(SolutionDir)'}"" />
</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.config
dosyalar 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.
ASP.NET Core