2013-01-19 25 views
26

Entity Framework aracılığıyla uzak bir veritabanına bağlanan bir ASP.NET Web Uygulaması projem var. Hata ayıklama sırasında (örn. Projeyi yerel bilgisayarımda çalıştırırken), veritabanının IP adresi, serbest bırakma sırasında farklıdır (örn. Projeyi web sunucusuna yükledikten ve tarayıcıdan çalıştırdıktan sonra). Şimdiye kadar Web.config dosyasındaki veritabanı bağlantı dizesini her zaman el ile değiştirdim (temelde bağlantı dizgileri, bir tanesi 'Debug' ve bir 'Release' olmak zorunda kaldım) ve dağıtdığım her defasında isimleri değiştirdim).Web.config Build vs Release dönüşümü çalışmıyor

Şimdi, bunun, Web.Release.config sürümüne değiştirilmiş bağlantı dizesini koyduğunuz yer olan Web.config Transformation Syntax aracılığıyla otomatik olarak gerçekleşmesine izin verilmesinin mümkün olduğunu fark ettim ve bu dosya, DLL Sürüm yapılandırması altında oluşturulduğunda kullanılmalıdır. . Bende işe görünmüyor Ancak

... İşte

(yerel kullanım için hata ayıklama bağlantı dizesini tutan) benim normal Web.config dosyasının ilgili parçasıdır:

<?xml version="1.0"?> 
<configuration> 

    <connectionStrings> 
    <!-- Debug connection string. Release connection string is in Web.Release.config file --> 
    <add name="DatabaseEntities" connectionString="A" providerName="System.Data.EntityClient" /> 
    </connectionStrings> 

</configuration> 

<?xml version="1.0"?> 
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform"> 

    <!-- Replace the DatabaseEntities connection string with the Release version (local IP address) --> 
    <connectionStrings> 
    <add name="DatabaseEntities" 
     connectionString="B" 
     xdt:Transform="Replace" xdt:Locator="Match(name)"/> 
    </connectionStrings> 

</configuration> 
: Burada

DLL Yayın modunda ise örneklere göre "B" ile 'DatabaseEntities' bağlantı dizesi "A" değiştirmeniz gerekir Web.Release.config dosyasıdır(Açıkçası "A" ve "B", gerçek bağlantı dizelerim için yalnızca yer tutucularıdır)

Uygulamayı hata ayıkladığımda (ör. sadece F5 tuşuna basın) varsayılan Web.config kullanılır ve veritabanına erişebilirim. Daha sonra Yapılandırma Yöneticisi aracılığıyla Sürüm yapılandırmasını değiştiririm. Çözümdeki tüm projeler Serbest Bırakma yapılandırmasına ayarlandı. Daha sonra çözümü (yalnızca Build aracılığıyla veya tam bir yeniden oluşturma yoluyla (örneğin, Clean, Rebuild)) yapıyorum. Yeni oluşturulmuş olan DLL'leri web sunucusuna, Web.config ve Web.Release.config dosyalarına yüklüyorum ve veritabanına erişmeye çalıştığımda hala hata ayıklama IP adresi üzerinden veritabanına erişmeye çalışıyordum. ve bu nedenle, bulamıyor ...

Web.Release.config dosyasının tamamen yok sayıldığı ya da en azından bağlantı dizesinin değiştirilmediği anlaşılıyor.

Neyi yanlış yapıyorum? Dönüşüm sözdizimi yanlış mı? Uygulamayı Yayın modu altında doğru şekilde oluşturmuyorum? Herhangi bir yardım için

Teşekkür ...

+0

Bu bazen biraz zor olabilir, bir ayar yanlış alırsanız çalışmaz. Configuration Manager'ın ekran görüntüsünü ekleyebiliyorsanız, gözden kaçırdığınız bir şeyi görebiliriz. –

+0

Bu gönderi bana yardımcı oldu: [http://stackoverflow.com/questions/3305096/how-can-i-use-web-debug-config-in-the-built-in-visual-studio-debugger-server] [1] [1]: http://stackoverflow.com/questions/3305096/how-can-i-use-web-debug-config-in-the-built-in-visual-studio -debugger-server –

cevap

51

Then I Build the solution (just via Build or even via a complete rebuild (e.g. Clean, Rebuild)). I upload the newly built DLLs to the webserver, as well as the Web.config and Web.Release.config files

sizin hata var

: basitçe inşa eğer Web yapılandırma dönüşümleri, yerel çevre için çalışmaz. Yayınlaman gerek.

Dağıtım işleminiz garip görünüyor: Yalnızca DLL, Web.config ve web.Release.config dosyalarını kopyalıyorsunuz. Bana göre, kaynak kodunuzu kopyaladığınız ve derlenmiş bir uygulama değil. Yayımlanan bir WebUygulaması web.release.config içermiyor.

Projenizi yerel dosya sisteminize (WebApplication -> Yayınla) sağ tıklayıp oradan kopyalayın ya da seçtiğiniz başka bir dağıtım yöntemi kullanın.

2 yıl önce web.config dönüştürmeleri hakkında bir makale yazdım.O (yayımlamak iletişim 2012 VS değiştirildi) size VS 2010 için bir adım-adım öğretici verir: http://www.tomot.de/en-us/article/5/asp.net/how-to-use-web.config-transforms-to-replace-appsettings-and-connectionstrings

+16

Yapı/F5 üzerindeki dönüşümü yapmanın bir yolu var mı? Hayatı kolaylaştıracak. –

+0

Birkaç fare çubuğunu kaydetmek için Build.PublishSelection öğesine bir kısayol atamayı deneyebilirsiniz. – citronas

+1

Sadece C:/Publish klasörüne yayınladım ve sonra serbest bırakma ayarlarını test etmek istediğim veritabanını kurdum. Pencereyi/system32/drivers/etc/hosts dosya ayarlarınızı "127.0.0.1 yayınlanan" olarak ayarlayabilir ve IIS için aynı (http: // yayınlanmış) bir uygulama kurabilirsiniz. Ardından istediğiniz zaman yayınlayın ve test edin. – jwize

3

Dönüşümün yalnızca siteyi/uygulamayı yayınladığınızda yapıldığını düşündüm. Bir uygulama oluşturulurken yapılmaz. İkincisi, sürekli olarak web.config dosyasını kaynak kontrolü altında değiştirirdi (ki bu gerçek bir güçlük olurdu)

1

Yalnızca web.config dönüşümü sırasında üzerine yazılmayan bağlantılar dizeleri varsa, bu benim yaptığım şeydi: "Web'de Yayınla" sihirbazının "Ayarlar" bölümündeki "Çalışma zamanında bu bağlantı dizesini kullan" onay kutusu. Bu ayar, bağlantı dizesinin web.config dönüştürmesinin üzerine yazılmıştır.