2013-08-13 3 views
0

J'ai des fichiers XML qui se trouvent dans un assemblage externe. J'ai une application Windows qui fait référence à l'assembly externe, mais lorsque j'exécute l'application Windows et que j'essaie de lire les fichiers, elle utilise le chemin de l'application Windows au lieu du chemin d'assemblage où se trouvent les fichiers.Ouvrir un fichier à partir d'un assemblage externe?

L'assemblage externe est situé dans c: \ Service \ tp.dll

L'application Windows est situé dans c: \ projet \ windows \ bin. Tp.dll contient une méthode qui appelle File.OpenRead, mais lorsque j'exécute l'application Windows et appelle la méthode de tp.dll, elle utilise le chemin de l'application Windows au lieu du chemin de l'application tp.

+1

Montrez votre travail: qu'est-ce que votre look de code comme, ce sont le chemin du fichier (s) attendu vs réel? –

+1

Vous voulez dire la ressource intégrée? –

Répondre

1

peut-être mettre plus de description et un peu de code. important - Comment charger l'assemblage - Comment accéder au fichier XML.

+0

Est-ce que cela répond à la question? –

+0

Non, j'ai besoin de plus d'informations pour voir le problème poster du code s'il vous plaît. –

+0

Alors cela devrait être le commentaire. pas répondre –

2

En supposant que vous avez écrit cet assembly externe et que vous savez où tout est censé être, avez-vous essayé d'utiliser la classe Assembly pour la référencer?

http://msdn.microsoft.com/en-us/library/system.reflection.assembly.aspx

J'utilise cette classe pour charger des fichiers qui ont une action de construction de mon Embed Assemblée exécution en cours, mais je ne vois pas pourquoi vous ne pouviez pas charger une autre assemblée avec cette classe puis appelez la. GetManifestResourceStream (chemin d'accès au fichier que vous voulez) méthode.

Voici comment je l'utilise pour charger des données incorporées à partir de l'assemblage actuel. Modifiez le .GetExecutingAssembly() à la méthode .Load() à la place.

  Assembly loader = Assembly.GetExecutingAssembly(); 
      var rawstream = loader.GetManifestResourceStream(template); 
      byte[] byteArray = rawstream.ReadToEnd(); 

Après avoir examiné les documents MSDN, ce qui est probablement ce que vous devez commencer votre référence d'assemblage:

 Assembly SampleAssembly = Assembly.Load 
     ("SampleAssembly, Version=1.0.2004.0, Culture=neutral, PublicKeyToken=8744b20f8da049e3"); 
+0

Ceci est la partie confuse pour moi. Si mon application Windows fait référence à l'assembly externe, pourquoi ai-je besoin d'utiliser la réflexion pour y accéder à nouveau? – Xaisoft

+0

Bonne question, mais je n'ai pas de réponse à cela. J'avais besoin de la classe de l'Assemblée pour faire référence à une assemblée, et il est arrivé de vivre dans la réflexion alors je suis allé avec elle. –

+0

J'y ai réfléchi un peu plus: les fichiers que vous voulez de cet assemblage externe sont-ils intégrés à l'intérieur de l'assemblage? Si oui, votre assembly externe dispose-t-il d'une méthode publique capable de récupérer ces fichiers? Si ce n'est pas le cas, vous pouvez envisager d'ajouter un gestionnaire public capable de récupérer ces éléments, ce qui vous évite d'avoir recours à la réflexion. –

Questions connexes