Неопределенные символы для архитектуры x86_64: «_OBJC_CLASS _ $ _ xxx», на которые ссылается: objc-class-ref в yyy.o
blockquote>Это обычно означает, что вы вызываете «xxx» "(это может быть каркас или класс) из класса" yyy ". Компилятор не может найти «xxx», чтобы произошла эта ошибка.
Вам нужно добавить отсутствующие файлы (в данном случае «xxx»), щелкнув правой кнопкой мыши по папке проекта в окне навигатора и коснитесь «Добавить файлы в» YourProjectName "" вариант.
Всплывающее окно откроет ваши файлы проекта в Finder. Там вы можете увидеть недостающие файлы и просто добавить их в свой проект. Не забудьте проверить флажок «Копировать предметы в случае необходимости». Удачи !!
Таким образом, вот код, который на самом деле позволяет мне, на самом деле получают доступ к разделу appSettings в файле конфигурации кроме по умолчанию.
ExeConfigurationFileMap configFile = new ExeConfigurationFileMap();
configFile.ExeConfigFilename = Path.Combine(Environment.CurrentDirectory, "Alternate.config");
Configuration config = ConfigurationManager.OpenMappedExeConfiguration(configFile,ConfigurationUserLevel.None);
AppSettingsSection section = (AppSettingsSection)config.GetSection("appSettings");
string MySetting = section.Settings["MySetting"].Value;
Пакетный файл, который копирует Ваш желаемый конфигурационный файл в appname.exe.config и затем выполняет appname.exe.
Я должен был сделать это для моего приложения также, и контакт со стандартными объектами конфигурации превратился в такую чертовски' стычку для такого простого понятия, что я пошел этим путем:
затем я могу передать в любом имени файла конфигурации, в котором я нуждаюсь на командной строке и если Вы не там - просто загружают app.config в DataSet.
Jeezus это было sooo намного более простой после этого. :-)
Ron
Это не точно, на что Вы желаете... перенаправить фактическое ConfigurationManager
статический объект для указания на другой путь. Но я думаю, что это - правильное решение Вашей проблемы. Проверьте OpenExeConfiguration
метод на ConfigurationManager
класс.
, Если вышеупомянутый метод не то, что Вы ищете, я думаю, что это также стоило бы смотреть на использование поддержка Конфигурации из платформы Библиотеки Предприятия (разработанный и сохраняемый Microsoft Patterns & команда Методов).
Конкретно смотрят на FileConfigurationSource
класс.
Вот некоторый код, который выделяет использование FileConfigurationSource
от [1 112] Библиотека Предприятия , я полагаю, что это полностью удовлетворяет Вашим целям. Единственный блок, в котором Вы нуждаетесь от Lib Ent для этого, Microsoft.Practices.EnterpriseLibrary.Common.dll
.
static void Main(string[] args)
{
//read from current app.config as default
AppSettingsSection ass = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None).AppSettings;
//if args[0] is a valid file path assume it's a config for this example and attempt to load
if (args.Length > 0 && File.Exists(args[0]))
{
//using FileConfigurationSource from Enterprise Library
FileConfigurationSource fcs = new FileConfigurationSource(args[0]);
ass = (AppSettingsSection) fcs.GetSection("appSettings");
}
//print value from configuration
Console.WriteLine(ass.Settings["test"].Value);
Console.ReadLine(); //pause
}
Это соответствующая часть источника для приложения, которое использует конфигурацию по умолчанию и принимает переопределение через командную строку:
Получить текущую или пользовательскую конфигурацию в объекте конфигурации
Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
string defCfgName = Environment.GetCommandLineArgs()[0] + ".config";
if (arg.Length != 0)
{
string ConfigFileName = arg[0];
if (!File.Exists(ConfigFileName))
Fatal("File doesn't exist: " + ConfigFileName, -1);
config = ConfigurationManager.OpenMappedExeConfiguration(new ExeConfigurationFileMap { ExeConfigFilename = ConfigFileName }, ConfigurationUserLevel.None);
}
else if (!File.Exists(defCfgName)) Fatal("Default configuration file doesn't exist and no override is set." , -1);
Использовать объект конфигурации
AppSettingsSection s = (AppSettingsSection)config.GetSection("appSettings");
KeyValueConfigurationCollection a = s.Settings;
ConnectionString = a["ConnectionString"].Value;