2010-05-05 19 views
9

Mam dwa projekty Visual Basic 2008 - jeden to projekt biblioteki klas, a drugi to projekt Windows Forms. W projekcie biblioteki klas zdefiniowałem niektóre ciągi w zasobach projektu (właściwości projektu> karta Zasoby).Odczytywanie zasobów z pliku DLL

Buduję ten projekt biblioteki klas i otrzymuję plik DLL z folderu debugowania i dodawany jako odniesienie w moim projekcie Windows Forms.

Jak odczytać te ciągi z przywołanego pliku DLL?

Odpowiedz

7

Myślę, że po prostu użyjesz System.Reflection.Assembly.Load do załadowania drugiego zespołu, a następnie użyj konstruktora z System.Resources.ResourceManager, który pobiera zestaw.

Oto link pokazuje próbkę do, jak to zrobić:

http://msdn.microsoft.com/en-us/library/aa984408%28VS.71%29.aspx

Uwaga, nie sądzę, że potrzebuje do odniesienia dla tej pracy.

+0

Nazwa klasy resources.resx w Resources.resx.vb jest My.Resources. Z jaką nazwą mam się odwoływać? Me.rm = Nowy menedżer zasobów ResourceManager (("MyClassLibrary.Resources"), montaż) Czy to prawda? –

+0

Nie jestem pewien, ale wydaje się prawdopodobny. Chociaż sugerowałbym użycie odpowiedzi Donovana, ponieważ brzmi to tak, jakby to było bardziej odpowiednie dla ciebie –

12

Chociaż można dynamicznie ładować bibliotekę DLL zgodnie z sugestią, dobrze jest użyć referencji, tak jak to się stało. W rzeczywistości zalecałbym używanie odwołania, chyba że miałoby się szczególne wymagania do dynamicznego ładowania zestawu zasobów.

Aby uzyskać dostęp do zasobów, musisz wykonać kilka czynności.

  • W zespole zasobów należy upewnić się, że zasoby są publiczne. Domyślnie zasoby są ustawione na wewnętrzne, co oznacza, że ​​nie zobaczysz zasobów w aplikacji WinForm. Kliknij dwukrotnie na Właściwości \ Resources.resx, aby otworzyć widok zasobów. Na górnym pasku narzędzi pojawi się etykieta "Modyfikator dostępu" obok rozwijanej listy rozwijanej. Zmień wybór na publiczny.

  • Konieczne będzie odniesienie do zespołu z aplikacji formularzy. Oświadczyłeś, że już to zrobiłeś. Wystarczy zauważyć, że lepszym sposobem na to jest stworzenie rozwiązania, które zawiera oba projekty. Następnie w formularzu aplikacji wybierz Dodaj odwołanie. Kliknij kartę Projekty u góry. Kliknij dwukrotnie nazwę projektu biblioteki zasobów. Działa to lepiej niż bezpośrednie odwoływanie się do biblioteki DLL debugowania, ponieważ oznacza to, że jeśli zmienisz kompilację wydania i kompilację debugowania w aplikacji formularzy, automatycznie zbuduje ona pasującą wersję wydania/debugowania zespołu zasobów.

  • Po dodaniu odniesienia można po prostu odwołać się do typu z biblioteki DLL zasobów, np.

ResourceDLLNamespace.Properties.Resource.ResourceName

Tylko uwaga, trzeba mieć świadomość typu starć nazwy, jeśli używasz tej samej przestrzeni nazw dla swojej aplikacji form i DLL zasobów. W tej sytuacji zarówno twoja aplikacja formularzy będzie miała dostęp do własnej klasy Properties.Resources, jak i biblioteki DLL zasobu. Można zrobić dwie rzeczy, aby uniknąć w ten sposób:

  1. użyć innej przestrzeni nazw między dwoma zespołami
  2. W zespole zasobów nie obejmują domyślnego słownika zasobu Własności \ resources.resx. Usuń go i ręcznie dodaj nowy zasób, tj. Dodaj nowy element i wybierz "Plik zasobów". Powinieneś znaleźć, że nie będziesz mógł dodać nowego słownika zasobów do folderu Właściwości - dodaj go do katalogu głównego lub do innego folderu, jak tego potrzebujesz.Spowoduje to automatyczne nadanie mu innej nazwy, ponieważ znajduje się w innym folderze. Nadal możesz jednak chcieć uniknąć używania nazwy pliku zasobów "Zasoby", jak gdybyś posiadał wszystkie odpowiednie przestrzenie nazw w zakresie za pomocą instrukcji, otrzymasz ten sam problem, że kompilator nie będzie wiedział, z której wersji Zasobów korzystać.

-Donovan

+0

Czy mógłbyś rzucić okiem na moje pytanie plz. Mam problemy z zasobami z biblioteki dll. http://stackoverflow.com/questions/24070892/resources-dont-load-current-culture – Marc

Powiązane problemy