2015-11-13 1 views
0

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

public string ToXml<T>(T obj, string path) 
    { 

     var saveToXmlPath = Path.Combine(Path.GetDirectoryName(Assembly.GetEntryAssembly().Location), path); 
     using (var stringWriter = new StreamWriter((saveToXmlPath))) 
     { 
      var xmlSerializer = new XmlSerializer(typeof(ObservableCollection<object>)); 
      xmlSerializer.Serialize(stringWriter, obj); 
      return stringWriter.ToString(); 
     } 

    } 

    public Constructor() 
    { 
     var temp = new ObservableCollection<Model> { 
      new Model { ID = 1, Name = "Name1" }, 
      new Model { ID = 2, Name = "Name2" }, 
      new Model { ID = 3, Name = "Name3" } }; 
     ToXml(temp, @"Common\Assets\XML\XmlFile.xml"); 

    } 

Он постоянно говорят, что путь неправильно, держит добавление/отлаживать/большой в пути.

+3

Какова ценность Assembly.GetEntryAssembly(). Местонахождение? –

+1

Основываясь на вашем комментарии в другом ответе, путь, который возвращает сборка, является 'C: \\ Users \\ UserName \\ Documents \\ Visual Studio 2015 \\ Projects \\ SolutionName \\ ProjectName \\ bin \\ Debug \\ 'что правильно. Когда визуальная студия компилирует ваше приложение, она поместит ее в каталог 'bin', а затем внутри подкаталога для конфигурации, в этом случае' debug'. это местоположение, из которого выполняется текущий скомпилированный .exe. Где вы EXPECT, чтобы попытаться написать файл? –

+0

Я ожидаю, что он напишет файл в том месте, где я создал XML-документ. – Micsto

ответ

0

Установить точку останова на этой линии:

var saveToXmlPath = Path.Combine(Path.GetDirectoryName(Assembly.GetEntryAssembly().Location), path); 

Что сказать?

Assembly.GetEntryAssembly() Местоположение добавляет/отлаживает ваш путь.

+1

это ограничивает структуру каталогов, в которой развернута страница. не самый лучший ... –

+0

В нем написано: «C: \\ Пользователи \\ Имя_пользователя \\ Документы \\ Visual Studio 2015 \\ Проекты \\ SolutionName \\ Имя_проекта \\ bin \\ Отладка \\ Общие/Активы/XML/XmlFile.xml " – Micsto

+0

Получите то же самое с большим \\ отладчиком, когда я использую AppDomain.CurrentDomain.BaseDirectory + @" ThePath/XmlFile.xml " – Micsto

0

Во-первых, ваша «проблема» не имеет отношения к . XML. Вы хотите знать, почему Assembly.GetEntryAssembly().Location дает вам «.../bin/Debug».

Во-вторых ... из какой небольшой информации вы фактически предоставили, на самом деле нет проблем; просто ваше недоразумение. Assembly.GetEntryAssembly().Location даст вам место действия файла ".exe" (ваше приложение). В этом случае по умолчанию это действительно будет внутри папки «bin/Debug». Если вы хотите, чтобы файл XML записывался где-то в другом месте, было бы полезно, если бы вы указали, где вы думаете, что где-то еще должно быть.

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