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.
Kaynak kodu dönüşümü, paket yüklendiğinde paketin content veya contentFiles klasöründeki dosyalara (contentve packages.config kullanan contentFiles müşteriler içinPackageReference) tek yönlü belirteç değişimi uygular ve burada belirteçler Visual Studio proje özelliklerine başvurur. Bu, bir dosyayı projenin ad alanına eklemenize veya genellikle bir ASP.NET projesinde global.asax içine yerleştirilen kodu özelleştirmenize olanak tanır.
Yapılandırma dosyası dönüşümü, ve web.configgibi app.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
contentvecontentFilesklasörlerinin içinde bulunmalıdır. Örneğin, adlıContosoData.csbir dosyanın hedef projenin birModelsklasörüne yüklenmesini istiyorsanız, dosyanın paketteki vecontent\ModelsklasörlerinincontentFiles\{lang}\{tfm}\Modelsiçinde olması gerekir.Yükleme zamanında belirteç değiştirme uygulaması talimatı vermek için NuGet'e,
.ppetiketini kaynak kod dosyası adına ekleyin. Yüklemeden sonra dosya uzantısına.ppsahip olmayacaktır.Örneğin,
ContosoData.csiçinde dönüştürmeler yapmak için paketteki dosyayıContosoData.cs.ppolarak adlandırın. Kurulumdan sonraContosoData.csolarak 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ükleme sırasında, NuGet kök isim alanı
Fabrikamolan hedef projeyi varsayarak$rootnamespace$değeriniFabrikamile değiştirir.
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:
-
app.config.transformveweb.config.transformdosyalarını,contentklasörünüze dahil edin; burada uzantı.transform, bu dosyaların paket yüklendiğinde var olan yapılandırma dosyalarıyla birleştirilmek üzere XML içerdiğini NuGet'e bildirir. Bir paket kaldırıldığında, aynı XML kaldırılır. - İstediğiniz değişiklikleri açıklamak için
app.config.install.xdtkullanarak paketinizinweb.config.install.xdtklasörüne vecontentdosyalarını ekleyin. Bu seçenekle, paket projeden.uninstall.xdtkaldırıldığında değişiklikleri tersine çevirmek için bir dosya da ekleyebilirsiniz.
Uyarı
Dönüştürmeler, Visual Studio'da bağlantı olarak referans verilen dosyalara uygulanmaz .config.
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
content klasöründeki app.config.transform 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.configaş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 kurulumu sırasında modules bölümüne bir MyNuModule öğesi eklemek için, paketinizin content klasöründe aşağıdakine benzer bir web.config.transform dosyası 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>
Dikkat edin, NuGet modules bölümünü değiştirmedi, sadece yeni öğeler ve öznitelikler ekleyerek mevcut girişe yenisini birleştirdi. 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.configbirçok girdi ekler ve bu girdiler bir paket kaldırıldığında yeniden kaldırılır.
Dosyasını incelemek için yukarıdaki bağlantıdan ELMAH paketini indirin, paket uzantısını `.nupkg`den `.zip`ye değiştirin ve ZIP dosyasında `content\web.config.transform` dosyasını açın.
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.
web.configde yapılan tüm değişikliklere bakın. Şimdi paketi kaldırdığınızda önceki durumuna geri döndüğünü göreceksiniz web.config .
XDT dönüşümleri
Uyarı
Belgelerde packages.config sürümünden PackageReference sürümüne geçiş için paket uyumluluğu sorunları bölümünde belirtildiği gibi, aşağıda açıklanan XDT dönüştürmeleri yalnızca packages.config tarafından 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ı sağlamak için PackageReference 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 $ değiştirmesini sağlayabilirsiniz.
Örneğin, aşağıdaki app.config.install.xdt dosyası, projeden FullPath, FileName ve ActiveConfigurationSettings değerlerini içeren bir appSettings öğesini app.config içine 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.configaşağıdaki içeriği içerdiğini varsayalım:
<configuration>
<system.webServer>
<modules>
<add name="ContosoUtilities" type="Contoso.Utilities" />
</modules>
</system.webServer>
</configuration>
Bir paketi yüklerken modules bölümüne bir MyNuModule öğesi eklemek için, paketin web.config.install.xdt şunları içermektedir:
<?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 MyNuModule sırasında yalnızca web.config.uninstall.xdt öğ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>