2013-08-28 13 views
6

Ho un'applicazione VB.NET che è schiantarsi con il seguente errore:Distribuzione 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'

Sto cercando di utilizzare la libreria Microsoft.Bcl.Async. L'ho installato tramite Nuget sul progetto che utilizza effettivamente le chiamate Async/Await e il progetto che fa riferimento ad esso. Tutto funziona perfettamente sul mio computer, ma quando pubblico e eseguo il test su un altro computer, il mio programma si arresta in modo anomalo quando provo a utilizzare la parte di esso che utilizza Async/Attesa.

System.Threading.Tasks fa riferimento in entrambi i progetti con Copia locale impostato su true. Microsoft.Threading.Tasks fa riferimento in entrambi i progetti con Copia locale impostato su true. Ho visto the other thread su questo ed è installato nei progetti pertinenti. Queste sono le righe contenute nel file 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> 

Cosa mi manca con l'impostazione? Per favore fatemi sapere se avete bisogno di maggiori informazioni. Grazie!

+0

Si applica anche a C#. – tiwahu

risposta

1

Fare clic una volta includerà solo il 3 principale DLL Microsoft.Threading.Tasks.dll, Microsoft.Threading.Tasks.Extensions.dll, e Microsoft.Threading.Tasks.Extensions.Desktop.dll

enter image description here

Tuttavia, ci sono alcuni più DLL che sono due dipendenze che vengono aggiunti quando si aggiunge il pacchetto NuGet che sono non incluso nel distribuibile System.Runtime.dll e System.Threading.Tasks.dll Si può vedere che la proprietà Path per quelle due rifrazioni si trova all'interno del progetto, non nella posizione normale.

enter image description here

io non sono del tutto sicuro di come risolvere il problema, ma almeno ora si sa qual è il problema.

+0

Vedo 'System.Runtime.dll' e' System.Threading.Tasks.dll' nella mia lista di riferimenti. Qual è la posizione "normale" rispetto alla posizione "non normale"? – Cuthbert

+0

La posizione normale sarebbe 'C: \ Programmi (x86) \ Reference Assemblies \ Microsoft \ Framework \ .NETFramework \ v4.0 \' il pacchetto NuGet deve sostituire questi due assembly con la sua copia locale, ed è per questo che usa quelle dll speciali. –

9

ho trovato una soluzione pubblicato sul sito del progetto:

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

Risoluzione

Ciò si verifica perché ClickOnce non riesce a distribuire alcune assemblee richiesti. Per risolvere il problema, effettuare le seguenti operazioni:

1.Fare clic destro sul progetto e scegliere Aggiungi elemento esistente

2.Spostarsi fino alla cartella del pacchetto net40 Microsoft.Bcl

3.In il nome del file casella di testo immettere .

4.Holding CTRL, selezionare System.Runtime.dll e System.Threading.Tasks.dll

5.Click sulla freccia in giù accanto al pulsante Aggiungi e scegliere Aggiungi come collegamento

6 .in Esplora soluzioni, tenendo premuto CTRL selezionare System.Runtime.dll e System.Threading.Taks.dll

7.Right clic sulla selezione, scegliere Proprietà e modificare Copia Output Directory per copiare sempre

8.Ripubblicazione