2013-08-13 6 views
0

У меня есть XML-файлы, которые находятся во внешней сборке. У меня есть приложение Windows, которое ссылается на внешнюю сборку, но когда я запускаю приложение Windows и пытаюсь читать из файлов, он использует путь к окну Windows, а не путь сборки, где находятся файлы.Открыть файл с внешней сборки?

Внешний узел находится в C: \ Сервис \ tp.dll

приложение окна находится в C: \ Проект \ Windows \ бен.

tp.dll содержит метод, который вызывает File.OpenRead, но когда я запускаю приложение Windows и вызываю метод из tp.dll, он использует путь к приложению Windows вместо пути tp app.

+1

Покажите свою работу: то, что делает ваш код выглядеть, какой путь к файлу (s) ожидаемый и фактический? –

+1

Вы имеете в виду встроенный ресурс? –

ответ

1

Возможно, добавьте некоторое описание и некоторый код. важно - Как вы загружаете сборку - Как вы получаете доступ к XML-файлу.

+0

Отвечает ли это на вопрос? –

+0

Нет, мне нужно больше информации, чтобы увидеть сообщение о проблеме с кодом. –

+0

Тогда это должен быть комментарий. не ответ –

2

Предполагая, что вы написали эту внешнюю сборку и знаете, где все должно быть, попробовали ли вы использовать класс Assembly, чтобы ссылаться на нее?

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

Я использую этот класс, чтобы загрузить файлы, которые имеют сборки действия врезать в моей текущей сборке исполняющей, но я не понимаю, почему вы не можете загрузить другую сборку с этим классом, то назвать. GetManifestResourceStream (путь к нужному файлу).

Вот как я использую его для загрузки встроенных данных из текущей сборки. Вместо этого измените метод .GetExecutingAssembly() на метод .Load().

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

После рассмотрения документации MSDN, это, вероятно, что вам нужно, чтобы начать ссылки на сборку:

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

Это запутанная часть для меня. Если мое приложение Windows ссылается на внешнюю сборку, зачем мне использовать рефлексию для доступа к ней снова? – Xaisoft

+0

Хороший вопрос, но у меня нет ответа на этот вопрос. Мне нужен был класс Ассамблеи, чтобы ссылаться на сборку, и это случилось, чтобы жить в отражении, поэтому я просто пошел с ним. –

+0

Я думал об этом немного больше - это файлы, которые вы хотите от этой внешней сборки, встроенной в сборку? Если да, имеет ли ваша внешняя сборка общедоступный метод, который может извлекать эти файлы? Если нет, вы можете подумать о добавлении публичного обработчика, который может извлекать эти элементы, что освобождает необходимость использования отражения. –

Смежные вопросы