Błąd z wczytaniem biblioteki przy użyciu konfiguracji Release

0

Dzień dobry,
główna metoda programu wczytuje polecenie które znajduje się w bibliotece polecenia.dll. Wszystko działa jak uruchomię program przy użyciu konfiguracji Debug, natomiast jak uruchomię go za pomocą Release to pojawia mi się błąd o następującej treści:

System.BadImageFormatException: 'Nie można załadować pliku lub zestawu 'polecenia.dll' lub jednej z jego zależności.  nie jest prawidłową aplikacją systemu Win32. (Wyjątek od HRESULT: 0x800700C1)'

Polecenie które powoduje błąd, ale tylko przy użyciu Release.

Assembly bibliotekaDll = Assembly.LoadFile(AppDomain.CurrentDomain.BaseDirectory + @"polecenia.dll");
Type TypBiblioteki = bibliotekaDll.GetType("polecenia.Polecenia");
object InstanacjaBiblioteki = Activator.CreateInstance(TypBiblioteki);
this.Text = (string)TypBiblioteki.InvokeMember("WyswietlNazweorazwersjeProgramu",
BindingFlags.InvokeMethod | BindingFlags.Static | BindingFlags.Public,
null, null, null);

W Build wartość dla Build Target jest : x86

MS Visual Studio 2017

0
rjakubowski napisał(a):

A dołączysz tego dlla do builda releasowego?
https://stackoverflow.com/questions/4596508/vs2010-how-to-include-files-in-project-to-copy-them-to-build-output-directory-a

Faktycznie nie miałem przy buildzie realeasowym znaczonej opcji Copy always. Jednak pomimo zaznaczenia tego i ponownego wykonania builda niestety nadal mam ten sam komunikat :(
Sam plik polecenia.dll pojawia się po komilacji
screenshot-20231124125437.png
screenshot-20231124125621.png

1

Masz pewność, że property BaseDirectory wskazuje na dobry folder?
Dodatkowo, nie korzystaj z konkatenacji stringow tylko użyj Path.Join, tak żeby nie mieć dziadostwa ze slashami.

0
rjakubowski napisał(a):

Masz pewność, że property BaseDirectory wskazuje na dobry folder?
Dodatkowo, nie korzystaj z konkatenacji stringow tylko użyj Path.Join, tak żeby nie mieć dziadostwa ze slashami.

No właśnie dobrą mam ścieżkę.
Przed kodem, który sprawia problem wstawiłem poniższy kod i niby ścieżka jest ok. Dziwne jest to że na konfiguracji Debug działa to.

            MessageBox.Show(AppDomain.CurrentDomain.BaseDirectory.ToString());
0
virusek391 napisał(a):

Dzień dobry,
główna metoda programu wczytuje polecenie które znajduje się w bibliotece polecenia.dll. Wszystko działa jak uruchomię program przy użyciu konfiguracji Debug, natomiast jak uruchomię go za pomocą Release to pojawia mi się błąd o następującej treści:

System.BadImageFormatException: 'Nie można załadować pliku lub zestawu 'polecenia.dll' lub jednej z jego zależności.  nie jest prawidłową aplikacją systemu Win32. (Wyjątek od HRESULT: 0x800700C1)'

Polecenie które powoduje błąd, ale tylko przy użyciu Release.

Assembly bibliotekaDll = Assembly.LoadFile(AppDomain.CurrentDomain.BaseDirectory + @"polecenia.dll");
Type TypBiblioteki = bibliotekaDll.GetType("polecenia.Polecenia");
object InstanacjaBiblioteki = Activator.CreateInstance(TypBiblioteki);
this.Text = (string)TypBiblioteki.InvokeMember("WyswietlNazweorazwersjeProgramu",
BindingFlags.InvokeMethod | BindingFlags.Static | BindingFlags.Public,
null, null, null);

W Build wartość dla Build Target jest : x86

MS Visual Studio 2017

Ok już wiem co było przyczyną błędu. W sekcji Build tam gdzie pisałem wcześniej że Platform target ustawiłem na x86 dla polecenia.dll zrobiłem to samo w głównym projekcie, który korzysta z biblioteki polecenia.dll. Wcześniej miałem ustawione Any CPU :)

1

Szafa gra. Do zamknięcia.

1
rjakubowski napisał(a):

Masz pewność, że property BaseDirectory wskazuje na dobry folder?
Dodatkowo, nie korzystaj z konkatenacji stringow tylko użyj Path.Join, tak żeby nie mieć dziadostwa ze slashami.

Dzięki za pomoc :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1