Kaynak kodu ve yapılandırma dosyalarını dönüştürme
Kaynak kodu dönüşümü, paket yüklendiğinde paketin content
veya contentFiles
klasöründeki dosyalara (content
ve contentFiles
kullanan packages.config
müşteriler içinPackageReference
) tek yönlü belirteç değişimi uygular ve burada belirteçler Visual Studio proje özelliklerine başvurur. Bu, projenin ad alanına bir dosya eklemenize veya genellikle bir ASP.NET projesinde girebilecek global.asax
kodu özelleştirmenize olanak tanır.
Yapılandırma dosyası dönüşümü, ve app.config
gibi web.config
bir hedef projede zaten var olan dosyaları değiştirmenize olanak tanır. Örneğin, paketinizin yapılandırma dosyasındaki modules
bölüme bir öğe eklemesi gerekebilir. Bu dönüştürme işlemi, yapılandırma dosyalarına eklenecek bölümleri açıklayan özel dosyalar pakete eklenerek gerçekleştirilir. Bir paket kaldırıldığında, aynı değişiklikler geri alınır ve bu iki yönlü bir dönüştürme olur.
Kaynak kodu dönüştürmelerini belirtme
Paketten projeye eklemek istediğiniz dosyalar paketin
content
vecontentFiles
klasörlerinin içinde bulunmalıdır. Örneğin, adlıContosoData.cs
bir dosyanın hedef projenin birModels
klasörüne yüklenmesini istiyorsanız, dosyanın paketteki vecontentFiles\{lang}\{tfm}\Models
klasörlerinincontent\Models
içinde olması gerekir.NuGet'e yükleme zamanında belirteç değiştirme uygulaması talimatı vermek için kaynak kod dosya adına ekleyin
.pp
. Yüklemeden sonra dosya uzantısına.pp
sahip olmayacaktır.Örneğin, içinde
ContosoData.cs
dönüştürmeler yapmak için paketindekiContosoData.cs.pp
dosyayı olarak adlandırın. Yüklemeden sonra olarakContosoData.cs
görünür.Kaynak kod dosyasında, NuGet'in proje özellikleriyle değiştirmesi gereken değerleri belirtmek için formun
$token$
büyük/küçük harfe duyarlı olmayan belirteçlerini kullanın:namespace $rootnamespace$.Models { public struct CategoryInfo { public string categoryid; public string description; public string htmlUrl; public string rssUrl; public string title; } }
Yüklemeden sonra NuGet, kök ad alanı
Fabrikam
olan hedef projenin olduğunu varsayarak değerini ileFabrikam
değiştirir$rootnamespace$
.
Belirteç $rootnamespace$
en yaygın kullanılan proje özelliğidir; diğer tüm özellikler proje özelliklerinde listelenir. Bazı özelliklerin proje türüne özgü olabileceğine dikkat edin.
Yapılandırma dosyası dönüştürmelerini belirtme
Sonraki bölümlerde açıklandığı gibi, yapılandırma dosyası dönüştürmeleri iki şekilde yapılabilir:
- Uzantının NuGet'e
content
paket yüklendiğinde var olan yapılandırma dosyalarıyla birleştirmesi için XML'yi içerdiğini bildirdiği.transform
paketinizin klasörüne veweb.config.transform
dosyalarını ekleyinapp.config.transform
. Bir paket kaldırıldığında, aynı XML kaldırılır. - İstediğiniz değişiklikleri açıklamak için XDT söz dizimini kullanarak paketinizin
content
klasörüne veweb.config.install.xdt
dosyalarını ekleyinapp.config.install.xdt
. Bu seçenekle, paket projeden.uninstall.xdt
kaldırıldığında değişiklikleri tersine çevirmek için bir dosya da ekleyebilirsiniz.
Not
Dönüştürmeler, Visual Studio'da bağlantı olarak başvuruda bulunan dosyalara .config
uygulanmaz.
XDT kullanmanın avantajı, yalnızca iki statik dosyayı birleştirmek yerine, tam XPath desteği kullanılarak öğe ve öznitelik eşleştirme kullanarak XML DOM'unun yapısını düzenlemeye yönelik bir söz dizimi sağlamasıdır. XDT daha sonra öğeleri ekleyebilir, güncelleştirebilir veya kaldırabilir, belirli bir konuma yeni öğeler yerleştirebilir veya öğeleri (alt düğümler dahil) değiştirebilir/kaldırabilir. Bu, paket yüklemesi sırasında yapılan tüm dönüştürmeleri geri alan kaldırma dönüşümleri oluşturmayı kolaylaştırır.
XML dönüşümleri
app.config.transform
Bir paketin content
klasöründeki ve web.config.transform
yalnızca projenin mevcut app.config
ve web.config
dosyalarıyla birleştirilecek öğeleri içerir.
Örneğin, projenin başlangıçta içinde web.config
aşağıdaki içeriği içerdiğini varsayalım:
<configuration>
<system.webServer>
<modules>
<add name="ContosoUtilities" type="Contoso.Utilities" />
</modules>
</system.webServer>
</configuration>
Paket yükleme sırasında bölümüne bir MyNuModule
öğe modules
eklemek için paketin content
klasöründe aşağıdakine benzer bir web.config.transform
dosya oluşturun:
<configuration>
<system.webServer>
<modules>
<add name="MyNuModule" type="Sample.MyNuModule" />
</modules>
</system.webServer>
</configuration>
NuGet paketi web.config
yükledikten sonra aşağıdaki gibi görünür:
<configuration>
<system.webServer>
<modules>
<add name="ContosoUtilities" type="Contoso.Utilities" />
<add name="MyNuModule" type="Sample.MyNuModule" />
</modules>
</system.webServer>
</configuration>
NuGet'in bölümün yerini modules
almadığını, yalnızca yeni öğeler ve öznitelikler ekleyerek yeni girişi birleştirdiğini unutmayın. NuGet var olan öğeleri veya öznitelikleri değiştirmez.
Paket kaldırıldığında NuGet dosyaları yeniden inceler .transform
ve içerdiği öğeleri uygun .config
dosyalardan kaldırır. Bu işlemin, paket yüklemesinin .config
ardından dosyada değiştirdiğiniz satırları etkilemeyeceğini unutmayın.
Daha kapsamlı bir örnek olarak, ASP.NET için Hata Günlüğü Modülleri ve İşleyicileri (ELMAH) paketi içine web.config
birçok girdi ekler ve bu girdiler bir paket kaldırıldığında yeniden kaldırılır.
Dosyasını incelemek web.config.transform
için yukarıdaki bağlantıdan ELMAH paketini indirin, paket uzantısını .nupkg
.zip
olarak değiştirin ve bu ZIP dosyasında açın content\web.config.transform
.
Paketi yüklemenin ve kaldırmanın etkisini görmek için Visual Studio'da yeni bir ASP.NET projesi oluşturun (şablon, Yeni Proje iletişim kutusundaki Visual C# > Web altındadır) ve boş bir ASP.NET uygulaması seçin. İlk durumunu görmek için açın web.config
. Ardından projeye sağ tıklayın, NuGet Paketlerini Yönet'i seçin, nuget.org ELMAH'a göz atın ve en son sürümü yükleyin. 'de yapılan tüm değişikliklere web.config
dikkat edin. Şimdi paketi kaldırdığınızda önceki durumuna geri döndüğünü göreceksiniz web.config
.
XDT dönüşümleri
Not
belgelerinden sürümüne geçişpackages.config
PackageReference
için belgelerde paket uyumluluğu sorunları bölümünde belirtildiği gibi, aşağıda açıklandığı gibi XDT dönüştürmeleri yalnızca tarafından packages.config
desteklenir. Aşağıdaki dosyaları paketinize eklerseniz, paketinizi kullanan PackageReference
tüketicilerin dönüştürmeleri uygulanmaz (XDT dönüşümlerinin birlikte çalışmasınıPackageReference
sağlamak için bu örneğe bakın).
XDT söz dizimlerini kullanarak yapılandırma dosyalarını değiştirebilirsiniz. Ayrıca, sınırlayıcılara özellik adını $
ekleyerek (büyük/küçük harfe duyarlı olmayan) NuGet'in belirteçleri proje özellikleriyle değiştirmesini sağlayabilirsiniz.
Örneğin, aşağıdaki app.config.install.xdt
dosya içine projeden , FileName
ve ActiveConfigurationSettings
değerlerini içeren FullPath
bir appSettings
öğe app.config
ekler:
<?xml version="1.0"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
<appSettings xdt:Transform="Insert">
<add key="FullPath" value="$FullPath$" />
<add key="FileName" value="$filename$" />
<add key="ActiveConfigurationSettings " value="$ActiveConfigurationSettings$" />
</appSettings>
</configuration>
Başka bir örnek için projenin başlangıçta içinde web.config
aşağıdaki içeriği içerdiğini varsayalım:
<configuration>
<system.webServer>
<modules>
<add name="ContosoUtilities" type="Contoso.Utilities" />
</modules>
</system.webServer>
</configuration>
Paket yükleme sırasında bölümüne bir MyNuModule
öğe modules
eklemek için, paketin web.config.install.xdt
öğeleri şunları içerebilir:
<?xml version="1.0"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
<system.webServer>
<modules>
<add name="MyNuModule" type="Sample.MyNuModule" xdt:Transform="Insert" />
</modules>
</system.webServer>
</configuration>
Paketi yükledikten sonra şöyle web.config
görünür:
<configuration>
<system.webServer>
<modules>
<add name="ContosoUtilities" type="Contoso.Utilities" />
<add name="MyNuModule" type="Sample.MyNuModule" />
</modules>
</system.webServer>
</configuration>
Paket kaldırma web.config.uninstall.xdt
sırasında yalnızca MyNuModule
öğesini kaldırmak için, dosya aşağıdakileri içermelidir:
<?xml version="1.0"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
<system.webServer>
<modules>
<add name="MyNuModule" xdt:Transform="Remove" xdt:Locator="Match(name)" />
</modules>
</system.webServer>
</configuration>
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin