C # 4.0 kullanarak excel eklenti derlemeye çalışıyorum ve Visual Studio projemi oluştururken bu sorunu almaya başladı. Bu sorunu daha önce yaşamadığımı söylemek önemli. Bunun olmasına ne neden olabilir?
C # 4.0 kullanarak excel eklenti derlemeye çalışıyorum ve Visual Studio projemi oluştururken bu sorunu almaya başladı. Bu sorunu daha önce yaşamadığımı söylemek önemli. Bunun olmasına ne neden olabilir?
Yanıtlar:
Benim tahminim, güçlü bir şekilde adlandırılmış meclislerle çalışmamanız. İki proje aynı derlemenin biraz farklı sürümlerine ve daha bağımlı bir proje bu projelere başvurduğunda bu hatayla karşılaştım. Benim durumumda çözüm anahtar ve sürüm bilgilerini .csproj dosyalarında derleme adından kaldırmak (yine de önemli değildi) ve sonra temiz bir yapı yapmak oldu.
Farklı montaj versiyonları arasındaki değişiklikler, çözümün bunlara atıfta bulunan kısımlarıyla uyumluydu. Bu durum sizin için uygun değilse, sorunu çözmek için biraz daha çalışmanız gerekebilir.
NuGet ile şu durumlarda bu duruma girmek kolaydır:
Bu, çözümünüzde o paketin derlemelerinin farklı sürümlerine başvuruda bulunan iki projeyle sonuçlanır. Bunlardan biri diğerine başvuruyorsa ve bir ClickOnce uygulamasıysa, bu sorunu görürsünüz.
Bunu düzeltmek update-package [package name]
için, Nuget Paket Yöneticisi Konsolu'nda her şeyi düz bir oyun alanına getirme komutunu verin, bu noktada problem ortadan kalkar.
Zorlayıcı bir neden olmadığı sürece NuGet paketlerini proje düzeyinde değil çözüm düzeyinde yönetmelisiniz. Çözüm düzeyinde paket yönetimi, bağımlılıkların çoklu sürümlerinin potansiyelini önler. Yönetim kullanıcı arayüzünü kullanırken, Birleştirilmiş sekmesinde 1 veya daha fazla paketin birden fazla sürümü varsa, bunları birle birleştirmeyi düşünün.
Bu sorunu yaşadığımda, 'ClickOnce güvenlik ayarlarını etkinleştir' seçeneğini kapatarak çözdüm.
Menü: Proje | 'Proje adı' Özellikler ... | Güvenlik sekmesi | 'ClickOnce güvenlik ayarlarını etkinleştir' onay kutusu.
Bu cevaba bakınız .
Yayınlama sayfasına gidin ve "Uygulama Dosyaları" nı tıklayın. Buradan DLL'lerinizin bir listesini görmelisiniz. Sorun çıkaranların Yayın Durumlarının "Önkoşul" yerine "İçer" olarak işaretlendiğinden emin olun.
Derleme sürümünüzü değiştirdiyseniz veya yönetilen kitaplığın hatada belirtilen farklı bir sürümünü kopyaladıysanız, daha önce yanlış sürüme başvuruda bulunan dosyaları derlemiş olabilirsiniz. Bir 'Tümünü Yeniden Oluştur' (veya önceki yorumda belirtildiği gibi 'bin ve' obj 'klasörlerinizi silmeniz) bu durumu düzeltmelidir.
montajı bir anahtarla imzalamanız gerekir. Sekme imzasının altındaki proje özelliklerine gidin:
Yardımcı olabileceği herkes için bu soruna yönelik çözümümü eklemek.
Bu hatayı atan bir ClickOnce çözümü vardı. Uygulama ortak bir "Libs" klasörüne atıfta bulundu ve a Foo.dll
. Çözümdeki projelerden hiçbiri Foo.dll
"Libs" klasöründeki statik kopyaya başvurmazken, bu klasördeki bazı referanslar (yani: çözümümün referans Libs\Bar.dll
aldığı referanslar vardı Foo.dll
). CO uygulaması tüm bağımlılıklarıLibs
her iki kopya da projeye giriyordu. Bu, yukarıdaki hatayı oluşturuyordu.
Libs\Foo.dll
Statik versiyonumu bir alt klasöre taşıyarak sorunu çözdüm Libs\Fix\Foo.dll
. Bu değişiklik, ClickOnce uygulamasının yalnızca DLL dosyasının proje sürümünü kullanmasını sağladı ve hata kayboldu.
(Hatanın oluştuğu yerde) DLL'i silmek ve çözümü yeniden oluşturmak sorunumu çözdü. Teşekkürler
Bu sorudaki diğer tüm cevapları denediyseniz ve siz:
... Intellisense / ReSharper tarafından oluşturulan referans bir "normal" referans olacak ve beklendiği gibi bir NuGet referansı olmayacağı için NuGet paketleri DLL'inin projelerinizin Referanslarında ayrı sürümleri olabilir. t bulmak veya güncellemek!
Bunu düzeltmek için Project A'daki başvuruyu kaldırın, ardından yüklemek için NuGet'i kullanın ve tüm projelerde NuGet paketlerinin aynı sürüm olduğundan emin olun. ( bu cevapta açıklandığı gibi )
Bu sorun ReSharper / Intellisense projenize bir referans eklemeyi önerdiğinde ortaya çıkabilir. Birden fazla iç içe geçme projesi ve bağımlılığı izlemeyi zorlaştıran yukarıdaki örnekten çok daha derinden kıvrık olabilir. ReSharper / Intellisense tarafından önerilen başvuru aslında bir NuGet paketindeyse, yüklemek için NuGet kullanın.
Çözümümde geçip bireysel olarak güncellenecek çok fazla proje vardı, bu yüzden bunu şu şekilde çözdüm:
Bir Excel eklentisini Packages.config dosyasından PackageReference öğesine taşıdıktan sonra bu sorunla karşılaştım. Bu konuyla ilgili görünüyor .
Aşağıdaki, ClickOnce kullanmıyorsanız kaba bir geçici çözüm olarak çalışır ( .manifest
dosyadan tüm bağımlılık bilgilerini atlar ):
Şuna benzeyen bölümü bulun:
<!-- Include additional build rules for an Office application add-in. -->
<Import Project="$(VSToolsPath)\OfficeTools\Microsoft.VisualStudio.Tools.Office.targets" Condition="'$(VSToolsPath)' != ''" />
Başvurulan .targets
dosyanın yeniden adlandırılmış bir kopyasını düzenleyin (benim durumumda, dosya çözüldü C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\Microsoft\VisualStudio\v15.0\OfficeTools\Microsoft.VisualStudio.Tools.Office.targets
ve Microsoft.VisualStudio.Tools.Office_FIX.targets
aynı klasörde bir kopya oluşturdum - farklı bir klasörden çalışıp çalışmadığını kontrol etmedi).
GenerateApplicationManifest
Öğeyi bulun ve özelliğini Dependencies="@(DependenciesForGam)"
değiştirin Dependencies=""
.
.targets
Bunun yerine düzenlenen dosyaya başvurmak için 2. bölümünde bulunan bölümü değiştirin .
.targets
VS ile birlikte gelen dosyanın sürümü güncellendiğinde (veya güncellemeleri alamayacağınız zaman) bu tekrarlanmalıdır , ancak yakında düzeltileceğini umuyorum ...
Derlemeniz düzgün imzalanmış mı?
Bunu kontrol etmek için projenizde Alt + Enter tuşlarına basın (veya sağ tıklayın, ardından Özellikler). "İmzalama" ya gidin. "Montajı imzala" onay kutusunun işaretli olduğunu ve güçlü ad anahtarı dosyasının seçili olduğunu ve "Yalnızca gecikme işareti" seçeneğinin işaretini kaldırın .
Şimdi soruna farklı bir yaklaşım var:
Projeye sağ tıklayın ve 'Projeyi Kaldır' seçeneğini seçin. Projenizin kullanılamaz hale geldiğini fark edeceksiniz.
Kullanılamayan projeye sağ tıklayın ve 'Düzenle' seçeneğini seçin.
Tüm kaynak etiketlerini içeren '<ItemGroup>' etiketine gidin.
Şimdi hata listesinde görüntülenen referansa gidin, bunun tek bir etiket (yani < Reference Include="assemble_name_here, Version=0.0.0.0, Culture=neutral" / >
) kullandığını göreceksiniz .
Bunu aşağıdaki gibi görünecek şekilde değiştirin:
.
<Reference Include="assemble_name_here, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL" >
< Private > True < / Private >
< HintPath > path_here\assemble_name_here.dll < / HintPath >
< / Reference >
Ana projeniz bazı kütüphane projelerini kullanarak ve bunlara referans varsa, kütüphane projenizde bir şey değiştirdiğinizde proje örneğiniz kitaplık projesi yerine bir derleme dll dosyasına başvuruyorsanız, bu soruna neden olabilir (örn: bir sınıfı yeniden adlandırın).
Ana projenizle ilgili tüm referansları Nesne Tarayıcısı penceresinde (Görünüm-> Nesne Tarayıcısı) görüntüleyebilirsiniz. Bir dll dosyasına yapılan başvurunun her zaman bir sürüm numarası vardır. Örn: TestLib [1.0.0.0]
Çözüm: Ana projenizin kitaplık projesine geçerli başvurusunu silin ve o kitaplık projesine yeniden başvuru ekleyin.
Buradaki çözümlerin çoğunu denedikten sonra, nihayet bir kez tıklama projesinden projeye bir referans ekledim, bu onu Include'dan Include (Auto) olarak değiştirdi ve sonunda çalıştı.
Bunu 6 projeli bir çözümde yaşadım. Projelerimden biri, adı geçen derlemeye dosya başvurusu olarak başvuruyordu. Diğerleri proje referansını işaret ediyordu.
Bu durumlarda genellikle farklı bir hata alıyorum.
Benim çözümüm, adlandırılan derleme başvurulan herhangi bir yerde silmek ve geri eklemek oldu. Bir kez proje üzerinde çalıştım, bu sorun ortadan kayboldu. Bunu yapmadan önce, çözümü temizlemeyi ve hiçbir projenin imzalanmadığından emin olmayı denedim.
umarım birine yardım eder ...
Bir bağımlılık bağımlılıkları uyuşmazlığı durumunda, çözüm düzeyinde NuGet paket yöneticisine gidin ve Güncelle ve Birleştir sekmelerini kontrol edin, hepsini uyumlu hale getirin.
Son zamanlarda bu soruna çarptım. Benim durumumda, farklı montajlarda NuGet paketlerim var. Sahip olduğum şey kendi montajlarımla ilişkili aynı NuGet paketlerinin farklı versiyonlarıydı.
Benim çözümüm, tek tek projelerin aksine, Çözüm üzerine NuGet paket yöneticisini kullanmaktı. Bu, NuGet paketlerinizi istediğiniz kadar projeye yükseltebileceğiniz bir "konsolidasyon" seçeneğini etkinleştirir - böylece hepsi montajın aynı sürümüne referans verir. Konsolidasyonları yaptığımda derleme hatası kayboldu.
Update-package -reinstall -ignoredependencies ile deneyin
bin
veobj
projenizin klasörleri ve yine projeyi oluşturun. Bazen bu işe yarar.