2009-12-04 3 views
17

При компиляции проекта C# параметры приложения из app.config сохраняются вместе с файлом exe. Например, если имя программы «solve_np.exe», рядом с ним будет «solve_np.exe.config», что делает его менее аккуратным, чем я хочу. Как вы можете встроить его в .exe?Как вы встраиваете app.config в проекты C#?

Я попытался установить Build Action для вставки ресурса, но это не помогло.

ответ

10

Aha. Я полагаю, вы ошибаетесь в Visual Studio, автоматически помещая вещи в конфигурацию, которую вы НЕ хотите настроить конечным пользователем.

В этом случае используйте ресурсы. Просто добавьте новый файл типа .resx. С этим вы сможете добавить в файл ресурсов такие вещи, как строки и изображения. После его создания он должен обеспечивать статический доступ к ресурсам (он обычно генерирует файл кода из ресурсов для вас, поэтому вам не нужно самостоятельно обращаться к ResourceManager).

E.G. Если бы я сделал Resources.resx со строкой под названием MyConfigValue после сборки я должен иметь возможность получить доступ к этому, как:

textBox.Text = Resources.MyConfigValue; 

Если вы хотите значения, которые являются своего рода переменной, но не должны быть настраиваемым, то это правильное место положить их.

HTH.

+0

Я перефразировал вопрос, чтобы не расстраивать людей. – Wamiduku

+0

Я не расстроен. Я просто хочу знать, почему ты считаешь, что это непрофессионально. Вероятно, это ключ к тому, почему люди (включая меня) не понимают причины вашего вопроса. Какие данные хранятся в файле конфигурации? – Quibblesome

+1

Что-то вроде «менее аккуратного, когда пользователю не нужно менять конфигурацию», это то, что я должен был писать с самого начала, а не «непрофессиональный». Приношу извинения за то, что я неясен. Данные, которые заканчиваются в .config, генерируются VS. В общем, ааронлс описывает только то, что я хотел сказать. – Wamiduku

0

Я согласен с serhio darasd и Quibblesome, но вы можете просто удалить «solve_np.exe.config», и он просто будет использовать конфигурации по умолчанию.

6

Это не непрофессиональный, чтобы иметь файл app.config, поставляемый вместе с вашим exe. Я думаю, что слово вы может искать untidy. Я лично не считаю, что это так, но все разные! Возможно, вы могли бы просто сделать файл app.config скрытым по умолчанию?

Или еще одна альтернатива - создать свой собственный файл конфигурации, который можно сохранить в папке «Данные приложения» или даже сохранить настройки в реестре.

+0

+1 для предоставления реестра в качестве опции, который действительно отвечает на вопрос OP (не то, что мне очень понравилась эта опция). –

+3

Есть несколько вещей в .Net, которые настроены в app.config по умолчанию, но вам не нужно, чтобы пользователь мог его изменить. Такие вещи, как ключ и алгоритм Enterprise Library Cryptography. Было бы неплохо иметь возможность вставлять его в ваш exe, так как пользователю легко потерять app.config и сломать exe. –

2

Как правило, теория файла конфигурации заключается в том, что он сохраняет параметры, которые вы можете изменить, после того как вы развернули приложение (для чего-то вроде пользовательских настроек). Для этого вам нужно хранить где-то внешнее приложение. Если вы используете настройку по умолчанию, вы получаете «[Your] .exe.config». Есть много других вариантов, на которые вы могли бы обратить внимание, но почти каждый из них заканчивается файлом, написанным где-то, если вы предоставляете механизм, который сохраняет какие-то настройки.

4

Вот еще один фактор, который следует учитывать. Опытные разработчики .Net привыкли к стандартному дизайну приложений, который включает в себя использование файлов конфигурации как в веб-приложениях, так и в настольных приложениях. Если вы откажетесь от этой практики, вы сделаете ее более трудной для любых разработчиков, которые последуют за вами, чтобы понять, что вы сделали. Даже sa на веб-сервере могут быть смущены отсутствием файла конфигурации.

Поскольку почти все так делают, ваш код не выглядит «неопрятным» для других. Напротив, было бы недоумением не видеть конфигурационный файл, где ожидалось.

0

После рассмотрения того, что было написано в этих комментариях и других поисках, я решил, что лучший способ справиться с моей проблемой: привязать строку подключения Entity Framework к моему исполняемому файлу, а не к файлу MyApplication.exe.конфигурационный файл с моим развернутым решением был создан производным класс, как например:

Public Class MyEFDataContainerLocal 
    Inherits MyEFDataContainer 

    Public Sub New() 
     MyBase.New(My.Settings.MyEFContainerConnectionString) 
    End Sub 
End Class 

Я только что создал НастрПрил строковых тип подключения, содержащих ту же строку, что находится в файле app.config. Мне просто пришлось заменить &quote; фактическими кавычками.

Тогда, когда бы я хотел использовать MyEFDataContainer, как в Dim db As New MyEFDataContainer, я бы просто использовал Dim db As New MyEFDataContainerLocal.