2013-08-13 30 views
16

Próbuję użyć CefSharp do załadowania mojej aplikacji internetowej do winfoms. Dodałem 2 pliki DLL: CefSharp.dll i CefSharp.WinForms do referencji i dodać 2 pliki DLL icudt.dll i libcef.dll do mojego projektu poprzez dodanie istniejących elementów.
enter image description hereNie można załadować pliku lub zespołu "CefSharp.dll" lub jednej z jego zależności.

i jest to kod z formularza

public WebView web_view; 

public Form1() 
{ 
    InitializeComponent(); 
    web_view = new WebView("http://localhost:8084/wsmill",new CefSharp.BrowserSettings()); 
    web_view.Dock = DockStyle.Fill; 
    toolStripContainer1.ContentPanel.Controls.Add(web_view); 
    CefSharp.CEF.Initialize(new Settings()); 
} 

Po uruchomieniu aplikacji, mam ten błąd

nieobsługiwany wyjątek typu „System.IO.FileLoadException "wystąpił w WindowsFormsApplication1.exe Dodatkowe informacje: Nie można załadować pliku lub zespołu" CefSharp.dll "lub jednego z jego depe ndencies. Niepowodzenie procedury inicjowania dynamicznej biblioteki połączeń (DLL). (Wyjątek od HRESULT: 0x8007045a)

Więc ktoś, kto o tym wie proszę mi pomóc, dzięki

+2

zainstaluj Redystrybucyjny Visual C++ 2012. Powinien działać. – ARUNRAJ

+0

FYI, program Norton Antivirus spróbuje poddać kwarantannie plik cefsharp.dll. – djangofan

+0

Jak powiedział ARUNRAJ Zainstaluj to: https://www.microsoft.com/en-au/download/details.aspx?id=30679 –

Odpowiedz

5

Jest to częsty błąd, który jest spowodowany przez nie wszystkie pliki są obecne w folderze wyjściowym (bin \ Debugowanie lub bin \ Release, w zależności od konfiguracji w Visual Studio). CefSharp.dll jest DLL .NET oparte, która jest zależna od innych plików .dll, które z kolei zależy dodatkowo na innym .dll i innych plików ...

Oto wykaz minimalnych wymaganych plików:

  • libcef.dll (rdzeń chromu DLL, który zasadniczo zawiera przeglądarkę wWW + interfejs twardych cząstek CEF które zależą)
  • icudt.dll (DLL Unicode chrom, może być również obecny)
  • CefSharp.dll (zarządzany NET, który zawiera rdzeń CefSharp funkcjonalności)
  • CefSharp.WinForms.dll lub CefSharp.WPF.dll (w zależności od typu projektu )

Check this link for more details

+3

Jak mogę dodać biblioteki libcef i icudt? Wiem, że to nie jest. dll, więc nie mogę dodać go jak referencję, postępuj zgodnie z instrukcjami z Microsoft, tak jak powyżej, ale to nie zadziałało. –

1

Musisz ustawić „kopia do wyjścia” właściwości pliki do "copy always" lub "copy if newer". Powoduje skopiowanie wszystkich plików do katalogu wyjściowego, zgodnie z informacjami podanymi przez program Coder.

+0

nadal wyświetla błąd, niezależnie od tego, czy go zmieniłem, aby zawsze kopiować, czy też kopiowałem, czy nowszy numer: –

+0

@KienDangNgoc rozwiązałeś to, ponieważ w tym samym numerze znalazłem ten sam problem, – anna

+0

tak naprawdę dodałem te dwa bezpośrednio do mojej wersji bin i ustawiłem "copy to output" dla ja dziękuję c_wiz_kid – anna

6

Jest to powszechny problem i dlatego jest wymieniony w FAQ, numer pytanie 3.

@AcccessDenied ma rację. Pliki muszą znajdować się w folderze wyjściowym (bin \ Debug lub bin \ Release). Jednym ze sposobów na osiągnięcie tego celu jest użycie akcji Post-Build, którą można ustawić w ustawieniach projektu w Visual Studio.

Można również skonfigurować post-build w pliku .csproj, trochę tak:.

<Target Name="AfterBuild"> 
    <ItemGroup> 
    <CefBinaries Include="$(SolutionDir)CEF\$(UnmanagedPlatform)\*.*" /> 
    <LocaleFiles Include="$(SolutionDir)CEF\locales\*.*" /> 
    <SubProcessFiles Include="$(SolutionDir)$(UnmanagedPlatform)\$(Configuration)\CefSharp.BrowserSubprocess.exe" /> 
    </ItemGroup> 
    <Copy SourceFiles="@(CefBinaries)" DestinationFolder="$(TargetDir)" /> 
    <Copy SourceFiles="@(LocaleFiles)" DestinationFolder="$(TargetDir)locales" /> 
    <Copy SourceFiles="@(SubProcessFiles)" DestinationFolder="$(TargetDir)" /> 
</Target> 

(Ten przykład pochodzi z projektu CefSharp.Wpf.Example w kodzie źródłowym CefSharp, CefSharp3 oddziału Dokładna plik Lokalizacje mogą się różnić w Twoim przypadku, szczególnie jeśli używasz CefSharp1, więc dostosuj go w razie potrzeby, aby zapewnić poprawne skopiowanie plików.)

Nie polecam wkładania materiałów do bin \ Debug lub bin \ Release i dodawania ich do rozwiązanie przy użyciu Copy Always. Czuję się dla mnie jak kałuża.

+0

W końcu to dla mnie zadziałało, dzięki! – JoeB

+0

To rozwiązanie jest czystsze niż górna przegłosowana odpowiedź, nie pasuje do struktury katalogu NuGet CefSharp, ale daje ogólny pomysł. – Ziul

17

Musisz umieścić te pliki

libcef.dll 
icudtl.dat 
CefSharp.dll 
CefSharp.WinForms.dll 

do swojego kosza \ Debug (lub bin \ Release podstawowej konfiguracji)

i proszę nie zapomnij zainstalować Visual C++ Redystrybucja 2012 (Visual C++ Redystrybucja od wersji 43), jeśli nie Visual Studio zawsze wyświetli wyjątek powiedz nie znaleziono CefSharp.dll a chociaż już to masz!

Mam nadzieję, że ta pomoc.

+2

po instalacji, Redystrybucja Visual C++ 2012, działała – manit

+1

Przynajmniej z moją instalacją 2. plik powinien być icudtl.dat, nie icudt.dll. Zauważ "l" po "t" przed ".dat". –

+0

icudtl.dat jest plikiem pomocy Unicode, nie icudt.dll Zobacz https://github.com/cefsharp/CefSharp/wiki/Output-files-description-table-(Redistribution) –

5

Właśnie miałem problemów z tym także i ja, co następuje:

CefSharp.DependencyChecker nie zgłasza żadnych błędów, ale jak tylko zadzwoniłem pod nowy CefSharp.Wpf.ChromiumWebBrowser() wystąpił wyjątek.

Sprawdziłem wszystkie biblioteki DLL CEF przy użyciu ILSpy i odkryłem, że niektóre z tych bibliotek DLL również znajdują się w GAC. Jak tylko usunąłem je z GAC, wszystko działało dobrze!

+0

DZIĘKUJEMY. Czytałem wszystkie odpowiedzi online, w tym FAQ, i wszystkie pomijały kilka składników znalezionych przez DependencyChecker. – user884248

0

Ustawienie "msvcp120.dll" i "msvcr120.dll" na "Kopiuj zawsze" pomogło mi.