2010-09-15 33 views
12

Bir iş arkadaşım, COM birlikte çalışma ile JScript ile kullanmak için VB.net'de bir derleme oluşturdu. Derleme iyi çalışıyordu, ama imzaladık ve şimdi sadece Windows 7 makinelerinde çalışıyor gibi görünüyor. 2 Windows 7 ve 2 Windows Vista makinelerini test ettim. biz derleme imzalanmış ve biz JScript'te ActiveX nesnesini örneğini çalıştığınızdaDerlememi güçlü bir adla imzalamak çalışmayı durduruyor

bir hata yok mesajı ve sadece bir sayı ile döndürülür:

Error:
Error number: -2146234304

hata numarası için Google'da bir arama vermedi geri dönmek.

Takma addan güçlü adı kaldırırsak, düzgün çalışır. Sorunun ne olabileceği konusunda bir fikrin var mı? Bir fark yaratıp yaratmadığından emin değilsiniz, ancak derleme işlemi VS 2010 ile derlenip imzalanır.

+3

Durumunuzda, -2146234304'ün "S_FALSE" veya "ERROR_INVALID_FUNCTION" olduğunu düşünüyorum. err.exe, bu hata kodlarını görüntülemek için kullanışlıdır, bkz. http://blogs.msdn.com/b/astebner/archive/2008/06/17/8611734.aspx –

cevap

6

Toplama imzalandıktan sonra COM Interop'u yeniden oluşturdunuz mu? Derlemenin yeni sürümünü nasıl kaydedersiniz? Internet Explorer'ın önbelleğini temizlediniz mi?

Genelde hata -2146234304 (0x80131040), FUSION_E_REF_DEF_MISMATCH anlamına gelir: "[derleme] bölümündeki derleme tanımı," montaj referansı ile eşleşmiyor ". Bu yüzden, imzalı montajınızı kullanan derleme bildirimini güncellemeniz gerekir. Durumunuzda tam olarak ne anlama geldiğini öğrenmelisiniz. Meclise olan referans, AssemblyHKEY_CLASSES_ROOT\CLSID\{YOUR_GUID}\InprocServer32 değerinin altında ve sadece gerçek bildirimde değil.

Sorunu Fuslogvw.exe (Assembly Binding Log Viewer) (veya http://msdn.microsoft.com/en-US/library/ms229864(v=VS.80).aspx) ile ilgili olarak araştırmayı deneyebilirsiniz. HKLM\Software\Microsoft\Fusion altında kayıt defterinde bazı değişiklikler (eğer bir şekilde sorunu çözmez veya sorununu yeniden oluşturmaya kullanılabilecek bir proje için bir bağlantı sonrası olabilir

EnableLog, LogFailures gibi.

+0

* regasm.exe * nasıl kayıt oldugumu. Son sürümde, komut dosyasının, kayıt defteri anahtarlarını yazarak denetimi kaydetmesi gerekir, böylece * regasm.exe * 'den gelen çıktıyı taklit eder. Bunu Win 7'de hiçbir sorun olmadan yapabilirim ancak imzalı montajı Vista'da başlatamıyorum. Tavsiyeniz için teşekkürler, kontrol edip nasıl gideceğini size bildiririm. –

+1

@Andy E: Bir şey daha. Meclisinizi henüz "Scripting İçin Güvenli" yapmadıysanız, bunu yapmanızı tavsiye ederim. Bu çok kolay. "IObjectSafety" arayüzünü uygulamanız gerekmektedir (bkz. Http://blog.devstone.com/aaron/archive/2007/06/12/2409.aspx ve http://www.atalasoft.com/cs/blogs/rickm/ arşiv/2009/06/03/net-2-0-activex-control-gotchas-güvenli-için-scripting-ve-hooking-içine-events.aspx örneğin) – Oleg

+0

@Andy E: Herhangi bir ilerleme var mı araştırmalar? Sorun olan Vista bilgisayarındaki tüm IE ayarlarının Bölge güvenlik ayarlarını ve IE önbelleğini "C: \ Windows \ Downloaded Program Files" dahil olmak üzere sıfırlamaya çalıştınız mı? Montajı nasıl imzaladığınızı daha fazla anlatabilir misiniz? AssemblyInfo.cs de dahil olmak üzere Visual Studio projesinde anahtar dahil, veya SignTool.exe sn.exe ile ilgili olarak Delay Signing kullanın? Kod imzalama sertifikasının pvk dosyasını kullanıyor musunuz? Sertifika kullanırsanız, iyi bilinen otoriteden mi yoksa kendi imzalı mı? Montajı hedef bilgisayara nasıl dağıtıyorsunuz? – Oleg

0

Andy, this is relevant numaralı telefondan emin olun. çözüm var diyor ki:

ben yolunda (Add-in Express .NET \ Redistributables \ yeni birinden) adxloader.dll güncellemek için unuttum - Ben güncellendi sanırım ...

+0

Merhaba Peter. Bağlantı için teşekkürler, ancak Add-in Express kullanmıyorum. Problemin ilişkili olabileceğine dair bir fikrim var çünkü Add-in Express'in kendi montajımıza benzer şekilde çalıştığını düşünüyorum (System.Reflection'a çok güveniyorum). –

+0

@Andy: Endişelenme! Kulağa benzer geldiğini düşündüm. Üzgünüm daha fazla yardımcı olmadı. –

0

Numaranız, tamsayı aralığının başlangıcına çok benziyor!

Signed: −2,147,483,648 to +2,147,483,647, -(2^31)~(2^31-1) 

belki bir döküm hatası veya artırmak için çalışıyoruz gerçekten çok sayıda var ve maksimum (2147483647) ulaşırsa o

Sadece bir tahmin -2,147,483,648 geriye doğru sayım başlıyor!

1
önce gerekli olabilir

dependency walker kullanın, sorunlu makinede imzalı dll açmak için.Nasıl dll yüklenemedi söylemek gerekir.Bu, Windows sürümleri arasında farklı olan bir dll bağımlı olabilir, bu, daha sonra oturum açtıktan sonra bir sorun daha fazla

+0

Teşekkürler, ben kontrol edeceğim. –

0

Microsoft Enterprise Library kod bloklarını hiç kullanıyor musunuz? Bu sorunu görüyorum millet doğru signe'ye bir başvuru eklemiyor d kütüphaneleri kodlarını derlediklerinde.

EnterpriseLibrary kullanıyorsanız, biraz daha background.

5

Hata kodu ix 0x80131040. Bu, çok yaygın olan bir .NET istisnasıyla eşleşen bir koddur.

The located assembly's manifest definition does not match the assembly reference.

Bunun için bir ileti almadığınıza şaşırdım, hata işleme kodunuzu incelemek isteyebilirsiniz. Anyhoo, biraz DLL Cehennem var, CLR, [AssemblyVersion] veya PublicKeyToken kod oluşturmak için kullanılan referans derleme uymayan bir derleme bulma. Bunun güçlü bir adlandırılmış montajla ilişkili olduğu düşünüldüğünde, kodu kodunun oluşturulmasından sonra derlemesini imzalamış olabilirsiniz. Bu durumda, projenizden derleme referansını kaldırmanız ve tekrar eklemeniz yeterlidir, şimdi güçlü adlandırılmış montajı seçmeniz sorunu çözecektir.

Ancak, bu konuda tahmin etmenize gerek yok, Fuslogvw.exe yardımcı programı tam olarak neyin yanlış gittiğini size söyleyecektir. Bağlama girişiminin bir izini ve başarısızlık nedenini bulmak için önce çalıştırın.

+0

Teşekkürler, Hans. Yeni bir ortak jeton oluşturmak sorunu çözmüş gibi görünüyor, sadece daha fazla test yapmam gerekiyor. –

-1

.Net Framework Yapılandırma konsoluna gidin ve makinenizdeki Çalışma Zamanı Güvenlik İlkesi ayarları ile oynayın.

0

Derlemenizi çalışan bir XP yapılandırmasından (veya Vista kutusundan) imzalamayı deneyin. CAPICOM, Windows 7'de desteklenmez; böylece, aracı imzalamak için işaret aracı ne yapıyor olabilir, Vista ile geriye dönük olarak uyumlu olmayabilir. Şimdi CAPICOM çalışmasını çok iyi görmüştüm ama hiçbir sebepten dolayı başarısız olduğunu gördüm ve "desteklenmiyor" demek, aramayı denerseniz Microsoft desteğinden aldığınız anlamına geliyor.