2013-08-28 19 views
6

Mam aplikacji VB.NET, który uległ awarii z powodu następującego błędu:Wdrażanie Microsoft.Bcl.Async w/ClickOnce

System.IO.FileNotFoundException: Could not load file or assembly 'System.Threading.Tasks, Version=2.5.19.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The system cannot find the file specified. File name: 'System.Threading.Tasks, Version=2.5.19.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'

Próbuję użyć biblioteki Microsoft.Bcl.Async. Zainstalowałem go przez Nuget na projekcie, który faktycznie używa wywołań Async/Await i projektu, który się do niego odwołuje. Wszystko działa idealnie na moim komputerze, ale kiedy publikuję i testuję na innym komputerze, mój program ulega awarii, gdy próbuję użyć części, która używa Async/Await.

System.Threading.Tasks jest wymieniony w obu projektach Copy Local ustawiona na true. Microsoft.Threading.Tasks jest odwoływany w obu projektach za pomocą opcji Kopiuj zestaw lokalny do wartości true. Widziałem o tym the other thread i zostało zainstalowane w odpowiednich projektach. Są to linie zawarte w pliku app.config:

<dependentAssembly> 
    <assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> 
    <bindingRedirect oldVersion="0.0.0.0-2.5.19.0" newVersion="2.5.19.0" /> 
    </dependentAssembly> 
    <dependentAssembly> 
    <assemblyIdentity name="System.Threading.Tasks" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> 
    <bindingRedirect oldVersion="0.0.0.0-2.5.19.0" newVersion="2.5.19.0" /> 
    </dependentAssembly> 

Czego mi brakuje przy ustawianiu tego? Proszę dać mi znać, jeśli potrzebujesz więcej informacji. Dziękuję Ci!

+0

Dotyczy również języka C#. – tiwahu

Odpowiedz

1

Kliknij raz będzie zawierać tylko 3 główne DLL Microsoft.Threading.Tasks.dll, Microsoft.Threading.Tasks.Extensions.dll i Microsoft.Threading.Tasks.Extensions.Desktop.dll

enter image description here

Jednakże, istnieje kilka bibliotek DLL, które są dwa więcej zależności, które są dodawane podczas dodawania pakietu Nuget które są nieuwzględnione w możliwych do rozpowszechnienia System.Runtime.dll i System.Threading.Tasks.dll Możesz zobaczyć, że właściwość Path dla tych dwóch powtórzeń znajduje się wewnątrz projektu, a nie w normalnym położeniu.

enter image description here

nie jestem do końca pewien, jak to naprawić, ale przynajmniej teraz wiesz, na czym polega problem.

+0

Na liście referencji widzę pliki 'System.Runtime.dll' oraz' System.Threading.Tasks.dll'. Jaka jest "normalna" lokalizacja a "nie normalna" lokalizacja? – Cuthbert

+0

Normalną lokalizacją będzie "C: \ Program Files (x86) \ Zestawy referencyjne \ Microsoft \ Framework \ .NETFramework \ v4.0 \" pakiet NuGet musi zastąpić te dwa zestawy jego lokalną kopią i dlatego właśnie używa tych specjalnych bibliotek dll. –

9

znalazłem obejście zamieszczonych na stronie projektu:

http://blogs.msdn.com/b/bclteam/p/asynctargetingpackkb.aspx

Rozdzielczość

Dzieje się tak dlatego, że nie ClickOnce wdrożyć pewne wymaganych zespołów. Jako obejście, należy wykonać następujące czynności:

1.Right kliknięcie w projekcie i wybierz Add Existing Item

2.Browse do folderu Microsoft.Bcl pakietu net40

3.W nazwa pliku pole tekstowe wpisz .

4.Holding CTRL wybierz System.Runtime.dll i System.Threading.Tasks.dll

5.Kliknij strzałkę w dół obok przycisku Dodaj i wybierz Dodaj link

6 .in Solution Explorer, trzymając CTRL wybrać System.Runtime.dll i System.Threading.Taks.dll

7.Right kliknij zaznaczenie, wybierz Właściwości i zmienić Kopiuj do Output Directory Skopiuj zawsze

8.Ponownie opublikuj