.NET Framework olan bir projede publish sırasında çok anlamsız hata alabilirsiniz. Bilin ki ucu başka yerlere bağlanıyordur ama bu günlerinize sebep oluyor.
Örneğin “Web.config;Web.config” gibi anlamsız bir hatayla karşılaşırsanız acaba projenin .csproj dosyasında böyle bir ifade mi var ki dikkate alıyor diye düşünebilirsiniz. Oysa hiçbir .csproj’da bu ifadeyi göremeyebilirsiniz.
Visual Studio veya Rider kullanırken projeyi “Debug” modundan “Release” moduna da alsanız yine aynı hatayı görebilirsiniz.
Output tam hali böyle:
Publish has encountered an error. Build failed. Check the Output window for more details. A diagnostic log has been written to the following location: "C:\Users\Recep\AppData\Local\Temp\tmp7F84.tmp" 60>D:\soap\src\Administration\Admin.Main\Capthcha\Default.aspx.cs(31,21,31,30): warning CS0414: The field 'Default.YTickSize' is assigned but its value is never used 60> Admin.Main -> D:\soap\src\Administration\Admin.Main\bin\Admin.Main.dll 61>------ Publish started: Project: Admin.Main, Configuration: Release Any CPU ------ 61>Connecting to D:\soap\src\Administration\Admin.Main\bin\app.publish\... 61>C:\Program Files\Microsoft Visual Studio\2022\Community\MSBuild\Microsoft\VisualStudio\v17.0\Web\Microsoft.Web.Publishing.targets(1552,5): Error : Could not open Source file: Could not find file 'D:\soap\src\Administration\Admin.Main\Web.config;Web.config'.Çıktıyı iyi okuyalım.
Config transform / publish pipeline içinde hala bir yerde yanlış configuration eşleşmesi var. Hatanın alındığı yeri okyalım: “Microsoft.Web.Publishing.targets(1552,5)”.
Bu adım config transform aşamasıdır. Bu aşamada solution configuration vs. project configuration uyumsuzluğunda ikili web.config path üretir.
Şimdi bu duruma sebebiyet verebilen ve kontrol etmemiz gereken şeyleri başlıklar halinde vereceğim.
Web.Release.Config Kontrolü
Projenizi “Release” modunda kullanıyorsanız bu .config dosyasının varlığı önemli. MSBuild Web Deploy pipeline şunları arar: Web.config ve Web.Release.config.
Eğer ikinci dosya yoksa “transform boş” gibi davranması gerekir ama MSBuild’de olan bir bug string ifadeleri birleştirirken “Web.config;Web.config” yazıyor olabilir.
Projenizde Release.config dosyasını oluşturun ve içini böyle doldurun.
<?xml version="1.0"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
</configuration>Publish Profile Dosyası
İlk kontrol etmeniz gereken nokta: Properties/PublishProfiles/.pubxml
Publish profile dosyanızda bir ihtimal şu ifade yer alabilir:
<Content Include="Web.config;Web.config" />Sorunun kaynağı buysa çözümü de basit elbette. Bunu teke düşürün sorun çözülecektir.
Binding Redirect Uyarıları
Bunlar publish çıktınızı bozmaz ama karışık assembly versiyon uyarılarıdır. Projenizin .csproj dosyası içine aşağıdaki satırlarını ekleyin.
<PropertyGroup>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
<GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType>
</PropertyGroup>
Bunu ekleyince Visual Studio otomatik Web.config içine ekleme yapar.
msbuild.log Çıkartma
Olmuyor mu? Daha iyi çözümler getirelim o halde. MSBuild publish pipeline hala yanlış bir yapılandırma veya bozuk bir include okuyor. Şimdi bütün karmaşayı bir kenara bırakıp daha iyi yöntemle problemi bulalım. MSBuild’in gerçekten olarak hangi dosyaları publish etmeye çalıştığını çıkaralım.
Şimdi projenizin olduğu yerde Powershell veya Console’u açın ve bu komutu yazın:
dotnet msbuild /v:diag > msbuild.logBu log MSBuild’in hangi dosyaları dahil ettiğini, hangi publish profilini kullandığını, nereden “Web.config;Web.config” ürettiğini daha açık şekilde gösterir. Bunu yapmadan sorunu bulmak inanın çok zor.
Dilerseniz bu log kaydını yapay zeka uygulamalarına sorup analiz ettirebilirsiniz.
Şimdi çıkan log çıktısını inceleyelim. Dosya uzun olduğu için problemli yeri göstereceğim.
Assembly loaded during Evaluation: System.Security.Claims, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a (location: C:\Program Files\dotnet\shared\Microsoft.NETCore.App\8.0.2\System.Security.Claims.dll, MVID: 2ff5b9f4-4b56-436c-afe1-34f33361f17c, AssemblyLoadContext: Default) 21:44:29.999 1>Project "D:\soap\src\Administration\Admin.Main\Admin.Main.csproj" on node 1 (default targets). 21:44:30.000 1>D:\soap\src\Administration\Admin.Main\Admin.Main.csproj.user(5240,3): error MSB4019: The imported project "C:\Program Files\dotnet\sdk\8.0.200\Microsoft\VisualStudio\v17.0\WebApplications\Microsoft.WebApplication.targets" was not found. Confirm that the expression in the Import declaration "C:\Program Files\dotnet\sdk\8.0.200\Microsoft\VisualStudio\v17.0\WebApplications\Microsoft.WebApplication.targets" is correct, and that the file exists on disk. [D:\soap\src\Administration\Admin.Main\Admin.Main.csproj] 21:44:30.001 1>Done Building Project "D:\soap\src\Administration\Admin.Main\Admin.Main.csproj" (default targets) -- FAILED. Deferred Messages 21:44:30.012 0> Detailed Build Summary ====================== (TaskId:0) ============================== Build Hierarchy (IDs represent configurations) ===================================================== Id : Exclusive Time Total Time Path (Targets) ----------------------------------------------------------------------------------------------------------------------------------- (TaskId:0) 0 : 0.141s 0.141s D:\soap\src\Administration\Admin.Main\Admin.Main.csproj () (TaskId:0) ============================== Node Utilization (IDs represent configurations) ==================================================== Timestamp: 1 Duration Cumulative ----------------------------------------------------------------------------------------------------------------------------------- (TaskId:0) 638989154698695849: 0 0.143s 0.143s .. (TaskId:0) ----------------------------------------------------------------------------------------------------------------------------------- Utilization: 100.0 Average Utilization: 100.0 (TaskId:0)Şimdi bu log çıktısında sorun tamamen şurada:
The imported project “C:\Program Files\dotnet\sdk\8.0.200\Microsoft\VisualStudio\v17.0\WebApplications\Microsoft.WebApplication.targets” was not found.
Projemizin .csproj.user dosyasında, içine Visual Studio Web Application targets import eden satırlar eklenmiş. Ama dotnet build bu dosyayı desteklemiyor ve bu dosyanın içindeki import path hiç var olmayan bir yere işaret ediyor.
Bu dosya normalde build sırasında hiç kullanılmamalı. Ekstra import içeriyorsa işte böyle sorunlar çıkarıyor.
Projenizde bulunan “.csproj.user” dosyasını silin. Visual Studio yeni .csproj.user dosyasını otomatik yeniden oluşturur ama içinde import yoktur.
Sorun neden yaşandı?
- Proje .NET Framework Web Application olarak açıldı.
- Visual Studio .csproj.user dosyasına WebApplication.targets import etti.
- Ama artık dotnet build bu eski MSBuild extension ifadelerini görmüyor.
Bu yüzden de böyle “web.config;web.config” gibi anlamsız hatalar geliyor.



Yorum bırakın