ile VSIX DLL'lerini bulamıyorum Yönetilmeyen bir DLL dosyasından dağıtılan koda bağlı bir VSIX uzantısı var. DLL, VSIX ile dahil ettik ve doğru şekilde dağıtıldığını doğrulamak için bir zip programıyla VSIX'i açtım. Ancak, DllImport özniteliğini kullandığımda, .NET Framework bulamadığını iddia ediyor. VSIX'imde paketlenmiş bir DLL'den işlevleri nasıl alabilirim?DllImport
cevap
Burada neyin ters gittiğini bilmiyorum, ancak Windows ve Visual Studio'yu yeniden yükledim, projede hiçbir değişiklik yapmadım ve şimdi her şey yolunda. Diğer uygulamalar için DLL'leri bulmakla ilgili başka sorunlarım vardı ve sanırım ilişkilerle ilgili olduklarını sanıyordum, biraz ayar yapmalıydım.
Windows, sıkıştırılmış dosyalara gömülü DLL dosyalarını açamıyor; bu nedenle paketi açmanız ve yazıcıya erişiminizin olduğu bir klasöre yerleştirmeniz gerekiyor.
.NET Framework, DLL dosyanızın yollarını %LocalAppData%
numaralı telefona bakacaktır, bu nedenle DLL'inizi orada açmak mantıklı olacaktır.
Visual Studio, VSIX'deki dosyaları bir yükleme dizinine ayıklar. – Puppy
Olaylar Günlüğü'nü açabilir ve paketinizin DLL dosyasını yüklemeyi denediğini kontrol edebilir misiniz? https://en.wikipedia.org/wiki/Event_Viewer –
Ve bu araç muhtemelen yardımcı olabilir: http://technet.microsoft.com/en-us/sysinternals/bb896645 –
Rasgele durumlarda, hatalı paket yükleme hataları alıyorum. Sorunlar öncelikle birden fazla DLL dosyasından oluşan uzantıları etkiledi. Sonunda uzantıda sağlanan ana Package
'a [ProvideBindingPath]
özniteliği uygulayarak bunları çözdüm.
Öznitelik kaynağını projenize dahil etmeniz gerekir.
/***************************************************************************
Copyright (c) Microsoft Corporation. All rights reserved.
This code is licensed under the Visual Studio SDK license terms.
THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF
ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY
IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR
PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT.
***************************************************************************/
using System;
using System.Text;
namespace Microsoft.VisualStudio.Shell
{
/// <summary>
/// This attribute registers a path that should be probed for candidate assemblies at assembly load time.
///
/// For example:
/// [...\VisualStudio\10.0\BindingPaths\{5C48C732-5C7F-40f0-87A7-05C4F15BC8C3}]
/// "$PackageFolder$"=""
///
/// This would register the "PackageFolder" (i.e. the location of the pkgdef file) as a directory to be probed
/// for assemblies to load.
/// </summary>
[AttributeUsage(AttributeTargets.Class, AllowMultiple = true, Inherited = true)]
public sealed class ProvideBindingPathAttribute : RegistrationAttribute
{
/// <summary>
/// An optional SubPath to set after $PackageFolder$. This should be used
/// if the assemblies to be probed reside in a different directory than
/// the pkgdef file.
/// </summary>
public string SubPath { get; set; }
private static string GetPathToKey(RegistrationContext context)
{
return string.Concat(@"BindingPaths\", context.ComponentType.GUID.ToString("B").ToUpperInvariant());
}
public override void Register(RegistrationContext context)
{
if (context == null)
{
throw new ArgumentNullException("context");
}
using (Key childKey = context.CreateKey(GetPathToKey(context)))
{
StringBuilder keyName = new StringBuilder(context.ComponentPath);
if (!string.IsNullOrEmpty(SubPath))
{
keyName.Append("\\");
keyName.Append(SubPath);
}
childKey.SetValue(keyName.ToString(), string.Empty);
}
}
public override void Unregister(RegistrationContext context)
{
if (context == null)
{
throw new ArgumentNullException("context");
}
context.RemoveKey(GetPathToKey(context));
}
}
}
Evet, ama burada paketleri yüklemekten bahsetmiyorum. Yönetilmeyen DLL'ler ve paketler oldukça farklı mekanizmalar kullanır. – Puppy
- 1. DllImport İzin Verme
- 2. Dinamik olarak DllImport özniteliğini ayarlayın
- 3. dllimport ile dllexport arasındaki bağlantı
- 4. DLLImport Int ** - Nasıl yapılırsa bu nasıl yapılır
- 5. DllImport, DLL'nin yüklenip yüklenmediğini nasıl denetlerim?
- 6. C#/C++ - DllImport DLL bulamıyor DLL
- 7. Mac'te Mono'daki DllImport ile DllNotFoundException: yanlış mimari
- 8. Fare olaylarını yönlendirme [DllImport ("user32.dll")] tıklatın, çift tıklayın
- 9. Çalışma zamanı platformunda bulunmayan bir işlevi DllImport ettiğimde ne olur?
- 10. Wrapper C#
- 11. Giriş Noktası Bulunamadı Özel Durum
- 12. Windows hizmetlerini advapi32.dll kullanarak 64 bit sistemlere yükleme
- 13. Windows API'yi kullanarak bir uygulamanın MenuBar'ı nasıl kaldırılır?
- 14. İşaretçiyi bir işaretçiye nasıl yönlendiririm?
- 15. Wininet InternetGetCookie boş çerez verilerini alır
- 16. 'System.Runtime.InteropServices.DllImportAttribute' örnek yöntemine uygulanamaz
- 17. C# içinde JavaAccessability için örnek Java uygulamasını çalıştıran 64-bit Java SDK ve 64-bit pencereler ile
- 18. Oynatırken medya dosyasının bindirilmesi için herhangi bir yöntem var mı?
- 19. C# kullanarak bir işlem nasıl gizlenir/gösterilir? Benim yazılımın çalıştırılması sırasında
- 20. Windows, Windows hizmetinden masaüstü uygulaması başlatılamıyor 7
- 21. Yöntem nitelik hedefinin amacı nedir?
- 22. bir pencere bazen tip <code>int</code> ve türdeki diğer zamanların üstesinden
- 23. C# uygulamasında görev yöneticisi olarak görev değiştirme
- 24. Yönetilmeyen bir uygulama penceresini nasıl ön plana getirebilirim ve (simüle edilmiş) kullanıcı girişi için etkin pencereyi
- 25. bir "kullanarak InteropServices"
- 26. bir girişim yanlış biçim istisna Ayrıca dahili olarak bazı işlevleri çağıran bir C# Windows Başvurusu No. tasarladık
- 27. Bass.dll'de BadImageFormatException
- 28. nasıl sıralıyor dize sahipliğini almak veya almamak belirtmek için?
- 29. Platform Karşılaşılan hata korumalı bellek okuma veya yazma girişiminde bulundu
- 30. Bir dll'nin varlığı nasıl sağlanır
Belki de eksik yollar? Bu yardım eder mi? http://stackoverflow.com/a/10800260/71312 – Diryboy
Yönetilmeyen dll'nin uzantının yükleme dizinine doğru şekilde çıkarıldığını doğruladınız mı? Yönetilmeyen bir dll çağırır bir kabuk paketi dağıtan basit bir VSIX araya koydum. Yönetilmeyen dll'yi, İçeriğin bir oluşturma eylemiyle projeye ekledim ve VSIX'e dahil ettim. Hem hata ayıklamada hem de düzenli olarak dağıtılmış bir uzantı olarak doğru şekilde çalışır. – WarrenG
@WarrenG: Bunun nerede olduğu hakkında hiçbir fikrim yok. Benim DLL için derleme eylemim de "İçerik" ve VSIX içine dahil etmek için ayarlayın. – Puppy