2010-09-12 7 views
0

C app # console avec une référence à c:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\PrivateAssemblies\DataCollectors\x86\Microsoft.VisualStudio.Coverage.Monitor.dll:FileNotFoundException lors de l'utilisation Microsoft.VisualStudio.Coverage.Monitor.dll

using Microsoft.VisualStudio.CodeCoverage; 

namespace ConsoleApplication2 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      Monitor m = new Monitor(); 
     } 
    } 
} 

La ligne de création d'objet jette un FileNotFoundException avec le message Could not load file or assembly 'Microsoft.VisualStudio.Coverage.Monitor.dll' or one of its dependencies. The specified module could not be found.

Toute idée pourquoi ce qui se passe et comment peut être réparé?

Répondre

3

ou une de ses dépendances

Quelle est la partie pertinente du message d'erreur. Il a une dépendance sur vspmsg.dll à partir de ce même répertoire, vous devrez le copier à la main dans votre dossier bin \ Debug. L'utilisation d'assemblages privés, exclusifs à Visual Studio, est assez courageuse.

+0

Comment cela ne s'affiche-t-il pas dans l'ILDASM? – Aliostad

+0

@Aliostad, probablement parce que la bibliothèque n'est pas liée statiquement mais dynamiquement chargée avec 'LoadLibrary' à l'exécution. –

+1

Il s'agit d'un assembly écrit en langage C++/CLI. Il contient du code non géré. La raison pour laquelle il a besoin de la cible x86. Vous pouvez voir les dépendances non managées avec Dumpbin.exe/imports. Un pour vspmsg.dll, nommé GetErrorMessageModule. Vous n'êtes pas autorisé à le distribuer, mais si vous le faites de toute façon, vous devez également déployer les DLL d'exécution C++. –

1

Il y a 4 références dans cette DLL (Voici ce que vous trouverez dans Ildasm.exe):

.module extern **KERNEL32.dll** 
.module extern **MSVCR100.dll** 
.assembly extern **mscorlib** 
{ 
    .publickeytoken = (B7 7A 5C 56 19 34 E0 89)       // .z\V.4.. 
    .hash = (AF 35 A4 2A B0 0E 9D FC 8A 27 B8 29 E5 56 7D 12 // .5.*.....'.).V}. 
      18 84 3C 6B)          // ..<k 
    .ver 4:0:0:0 
} 
.assembly extern **Microsoft.VisualC** 
{ 
    .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A)       // .?_....: 
    .hash = (1B D7 52 11 F8 FD 90 65 01 8A 53 AA 7F 87 91 6D // ..R....e..S....m 
      F8 E3 72 91)          // ..r. 
    .ver 10:0:0:0 
} 

Les deux premiers sont utilisés comme DLL C et les deux autres comme référence .NET. Jetez un coup d'oeil pour vous assurer que vous avez Microsoft.Visual (dans le GAC) et MSVCR100.dll (quelque part sur votre machine qui est également un chemin).