Derleme zamanı bir özellik!
Bilmesi gereken en önemli şeylerden biri "Belirli Versiyon" etkili olacak bir özellik olmasıdır derleme zamanında ve değil çalışma zamanında.
Tüm bunlar ne hakkında?
Bir proje inşa edildiğinde, derleme sisteminin kullanması gereken fiziksel montajları bulmak için projenin montaj referanslarının çözülmesi gerekir. "Spesifik Versiyon" kontrolü yapılırsa ("Spesifik Versiyon" ne zaman kontrol edilir? "Bölümüne bakın), montaj çözümleme işleminin sonucunu etkiler:
- Yapı sistemi, potansiyel olarak kullanabileceği fiziksel bir montaj bulur
- Derleme sistemi, derleme başvurusu için fiziksel derlemenin sürümünü .csproj dosyasında depolanan derleme sürümüyle karşılaştırır
- İki montaj sürümü tamamen aynıysa, çözünürlük işlemi başarılı olur ve bulunan fiziksel montaj yapı için kullanılır
- İki montaj sürümü eşleşmezse, fiziksel montaj atılır ve çözümleme işlemi bir sonraki olası montajı bularak devam eder
- Daha fazla potansiyel fiziksel montaj bulunamazsa, çözümleme işlemi başarısız olur. Bu, başvurunun çözümlenemediğini bildiren bir derleyici uyarısı (MSB3245 uyarısı) verir.
- İlginçtir , yapı daha sonra devam eder! Kodun derlemeye gerçek bir başvurusu yoksa derleme başarılı olur (daha önce belirtilen uyarı ile). Kodun başvuruları varsa, derleme, kod bilinmeyen türler veya ad alanları kullanıyormuş gibi görünen bir hatayla başarısız olur. Derlemenin gerçekten başarısız olmasının tek göstergesi MSB3245 uyarısıdır.
Montajların çözülme sırası
Montaj çözümleme işleminin potansiyel montajları bulma sırası şu şekildedir:
<HintPath>
.Csproj dosyasındaki öğe tarafından başvurulan derleme
- Proje çıktı yolu
- GAC
Montajın GAC'de birkaç sürümü varsa, çözümleme işleminin önce en yüksek sürüme sahip montajı çözümlemeye çalıştığını unutmayın. Bu, yalnızca "Spesifik Versiyon" kontrolü yapılmamışsa önemlidir.
"Belirli Sürüm" ne zaman kontrol edilir?
Visual Studio, "Belirli Sürüm" denetiminin gerçekleştirilip gerçekleştirilmeyeceğine kararını .csproj dosyasında bulunan iki bilgi parçasına dayandırır:
<SpecificVersion>
Öğenin varlığı veya yokluğu ve değeri (varsa)
- Montaj referansında sürüm bilgilerinin varlığı veya yokluğu
Sürüm bilgileriyle tipik bir montaj referansı şöyle görünür:
<Reference Include="Foo, Version=1.2.3.4, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>True</SpecificVersion>
<HintPath>..\..\Bar\Foo.dll</HintPath>
</Reference>
Derleme başvurusu sürüm bilgisi olmadan şöyle görünür :
<Reference Include="Foo">
[...]
Aşağıdaki tabloda "Belirli Sürüm" denetiminin ne zaman gerçekleştirildiği ve ne zaman yapılmadığı gösterilmektedir.
| Version information
| Present Not present
----------------------------+------------------------------
<SpecificVersion> |
- Present, has value True | Yes (1) Yes (check always fails) (2)
- Present, has value False | No (3) No (4)
- Not present | Yes (5) No (6)
Buradaki şaşırtıcı şey, hem <SpecificVersion>
sürüm bilgileri hem de sürüm bilgileri yoksa hiçbir kontrol yapılmamasıdır (durum 6). Ben kontrol gerçekleştirilmesi ve her zaman başarısız olacağını umuyordum (durum 2 ile aynı) çünkü benim anlayış yokluğunda <SpecificVersion>
varsayılan değeri "Doğru" ima eder. Bu, testlerimi yaptığım Visual Studio 2010'un tuhaflığı olabilir.
Visual Studio kullanıcı arabiriminde bir derleme başvurusunun özelliklerini incelediğinizde (başvuruyu seçin ve F4 tuşuna basın), "Belirli Sürüm" özelliği için gördüğünüz değer, Visual Studio'nun "Belirli Sürüm" gerçekleştirip gerçekleştirmeyeceğini bildirir Kontrol. 6. durumda, <SpecificVersion>
öğe .csproj dosyasında bulunmasa da kullanıcı arabirimi "Doğru" gösterir .
"Yerel kopya" yan etkileri
"Yerel Kopyala" özelliği "Doğru" olarak ayarlanırsa, ancak "Belirli Sürüm" denetimi nedeniyle derleme çözümleme işlemi başarısız olursa, derleme kopyalanmaz.
Referans malzemesi