C # DLL файл конфигурации - PullRequest
       115

C # DLL файл конфигурации

183 голосов
/ 27 февраля 2009

Я пытаюсь добавить файл app.config в мою DLL, но все попытки не увенчались успехом.

В соответствии с MusicGenesis в « Размещение информации о конфигурации в DLL » это не должно быть проблемой. Очевидно, что я делаю что-то не так ...

Следующий код должен вернуть мою ConnectionString из моей DLL:

return ConfigurationManager.AppSettings["ConnectionString"];

Однако, когда я копирую файл app.config в консольное приложение, он работает нормально.

Есть идеи?

Ответы [ 16 ]

2 голосов
/ 09 февраля 2011

Я нашел то, что кажется хорошим решением этой проблемы. Я использую VS 2008 C #. Мое решение предполагает использование различных пространств имен между несколькими файлами конфигурации. Я разместил решение в своем блоге: http://tommiecarter.blogspot.com/2011/02/how-to-access-multiple-config-files-in.html.

Например:

Это пространство имен для чтения / записи настроек dll:

var x = company.dlllibrary.Properties.Settings.Default.SettingName;
company.dlllibrary.Properties.Settings.Default.SettingName = value;

Это пространство имен для чтения / записи настроек exe:

company.exeservice.Properties.Settings.Default.SettingName = value;
var x = company.exeservice.Properties.Settings.Default.SettingName;

В статье упоминаются некоторые оговорки. НТН

1 голос
/ 10 ноября 2017

Полное решение не часто можно найти в одном месте ...

1) Создайте файл конфигурации приложения и назовите его «yourDllName.dll.config»
2) Щелкните правой кнопкой мыши файл конфигурации, созданный выше в VS Solution Explorer, выберите свойства
--- set "Build Action" = Content
--- set "Copy To Output Directory" = Always
3) Добавьте раздел appSettings в файл конфигурации (yourDllName.dll.config) с вашим yourKeyName и yourKeyValue

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <appSettings>
    <add key="yourKeyName" value="yourKeyValue"/>
  </appSettings>
</configuration>

4) Добавьте System.Configuration в ваши ссылки на dll / class / project
5) Добавьте операторы использования в ваш код, где вы собираетесь получить доступ к настройке конфигурации

using System.Configuration;
using System.Reflection;

6) Для доступа к значению

string keyValue = ConfigurationManager.OpenExeConfiguration(Assembly.GetExecutingAssembly().Location).AppSettings.Settings["yourKeyName"].Value;

7) радуйся, все работает

ИМХО, это следует использовать только при разработке новой библиотеки / библиотеки.

#if (DEBUG && !FINALTESTING)
   string keyValue = ConfigurationManager.OpenExeConfiguration...(see 6 above)
#else
   string keyValue = ConfigurationManager.AppSettings["yourKeyName"];
#endif

Конфигурационный файл оказывается отличным справочным материалом, когда вы добавляете appSettings dll в ваше реальное приложение.

1 голос
/ 27 февраля 2009

Как говорит Марк, это невозможно (хотя Visual Studio позволяет добавлять файл конфигурации приложения в проект библиотеки классов).

Возможно, вы захотите проверить класс AssemblySettings , который, кажется, делает возможными файлы конфигурации сборки.

0 голосов
/ 19 июля 2017

Вы можете использовать этот код:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;

namespace GClass1
{
[Guid("D6F88E95-8A27-4ae6-B6DE-0542A0FC7039")]
[InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
public interface _GesGasConnect
{
    [DispId(1)]
    int SetClass1Ver(string version);


}

[Guid("13FE32AD-4BF8-495f-AB4D-6C61BD463EA4")]
[ClassInterface(ClassInterfaceType.None)]
[ProgId("InterfacesSMS.Setting")]
public class Class1 : _Class1
{
    public Class1() { }


    public int SetClass1(string version)
    {
        return (DateTime.Today.Day);
    }
}
}
0 голосов
/ 01 июня 2013

Для dll это не должно зависеть от конфигурации, поскольку конфигурация принадлежит приложению, а не dll.

Это объяснено на здесь

0 голосов
/ 20 ноября 2011

В этом посте обсуждалась похожая проблема и решалась моя проблема Как динамически загрузить отдельный файл настроек приложения и объединить его с текущими настройками? может быть helpfu

...