2008-12-17 15 views
18

Bir CommonUtils lib'im var Projelerimin birçoğundan başvuruda bulunduğum bir dll'ye ekledim. CommonUtils, bir dosya başvurusu olarak ayarlanan log4net.dll dosyasına ve CommonUtils.dll dosyası oluşturulduğunda copy-local = true değerine bağlıdır. log4net.dll ve CommonUtils.dll GAC'de değil.Çıkış dizinine kopyalanmayan başvuruların bağımlılıkları

MyWorkingProject öğesinde, yalnızca CommonUtils.dll dosyasına ilişkin bir dosya referansım var - log4net.dll çıktı dizininde (CommonUtils.dll dosyasının bir bağımlılığı olduğu ancak MyWorkingProject öğesinden kaynaklanmadığı gibi) görünür. Yine de bazı yeni sürüme eklemek için yeni bir proje oluşturursam: MyWorkingProjectTest ve proje başvurusu MyWorkingProject ve sonra başvuru buraya CommonUtils.dll (burada bazı CommonUtils kullanmak istiyorum) sonra her ikiside bir bağımlılık olan log4net.dll inşa üzerine proje referansı ve dosya referansında da çıktı dizinine kopyalanamaz.

Burada neler olup bittiğini açıklayan var mı? Derleyici hangi log4net.dll dosyaları kapmak gerektiğini bilmiyor mu? Burada yanlış yaptığım bir şey mi var? Ben açıkça log4net.dll kopyalamak için başka bir şekilde bunu yapmalı mıyım? Açıkça log4net'e başvurmam gerektiğini anlamış mıdır?

cevap

1

Eğer log4net'i projenize referans olarak eklemezseniz kopyalanmayacağınıza inanıyorum.

+0

Sadece dağıtılmış ikili dll'im olduğu gibi, log4net'i proje başvurusu olarak nasıl eklersiniz. Ayrıca neden referanslarımdan birinin bağımlılığı olduğu için bir referans eklemeliyim. Birisi, açıkça kodunuzda kullanmadığınız kitaplıklara başvurmamanız gerektiğini belirtti. – Fadeproof

+0

Projenizde bir "Referans" olarak bir "Proje Referansı" demek istemedim. – user7116

0

Geçmişte benzer bir durum yaşadığımda, Visual Studio'nun içinde, bağımlı kitaplığa bir başvuru eklemem gerektiğini söyleyen bir derleyici uyarısı aldım.

Derleme yaparken böyle bir uyarı alıyor musunuz? Eğer öyleyse, verdiği tavsiyeye uyun ve Log4net'i çıkış dizininize kopyalamanız gerekir.

+0

Sorun şu ki, ben log4net üzerinde bağımlılıkları olan iki referans var ve öyle görünüyor ki, çatışan bağımlılığı kopyalamak için görsel stüdyonun bazı şeyleri varmış gibi görünüyor. Ben her ikisini de referans gösterdiğim zaman sadece 1 tane referans aldığım ancak kopyalanmadığı sürece her şey beklendiği gibi çalışır. ? – Fadeproof

+0

Her iki referans da gerçekten aynı mecliste mi? Yolun aynı olduğundan emin olmak için her referansın özelliklerini kontrol edin. – Bevan

2

Bu, tasarım gereğidir. Referansların otomatik mirasının neden olacağı sonuçları düşünmelisiniz. Referansların ne olması gerektiğine mantıklı bir şekilde bakarken, derleyicide böyle bir sınırlama yoktur. Teorik olarak, tüm bağımlılık ağacını yürürlüğe koyarsa, Çerçeveyi ve işletim sisteminizin iyi bir kısmını yeniden üretebilirsiniz.

Bu kesinlikle bir acıdır ve hayal kırıklığınıza katılıyorum ve anlıyorum, ancak Microsoft'un bunu yapmak için mantıklı bir yol bulamadığını varsayıyorum.

+0

Bunu nasıl yapmam gerektiği konusunda tavsiyede bulunabilir misiniz? Ben her ikisi de log4net bağlıdır ve her ikisi de log4net.dll içeren MyProjDir/LibA ve MyProjDir/LibB bulunan LibA ve LibB varsa. Hangi log4net.dll başvurusu yapmalıyım? LibA ve libB oluştururken gitmek için log4net.dll için kopya-yerel doğru değil mi? – Fadeproof

+0

Üst düzey projeye kişisel olarak paylaşılan referansları ekliyorum. Örneğin, her iki kitaplığınız tarafından ve uygulama tarafından kullanılacaksa, log4net.dll dosyasını doğrudan uygulamanın/bin klasörüne eklerim. En iyi çözüm değil, ama referansı avlamaktan daha kolay olduğunu düşünüyorum. –

+0

"ve bir uygulama tarafından" = "uygulaması. Ayrıca, referansları üst seviyeye eklediğimi söyleyerek aldatmaktır.Bir başvuru eklemiyorum - sadece/bin klasörüne ekliyorum çünkü onu arayan kütüphaneler için tarama yolunda olacak. –

İlgili konular