Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.93/29: Рейтинг темы: голосов - 29, средняя оценка - 4.93
Злой самаритянин
182 / 182 / 94
Регистрация: 24.04.2014
Сообщений: 686
.NET 4.x

Включение содержимого App.config в сборку

01.06.2017, 15:38. Показов 5831. Ответов 22

Студворк — интернет-сервис помощи студентам
Всем привет!

Пишу плагин для CRM. Он встраивается туда как один файл *.dll, поэтому сторонних файлов библиотек и конфигов там быть не может (на диске не позволяет разместить, только в базе). Далее работает на сервере. Ну библиотеки я включил в GAC, а вот App.config не знаю как пристроить - там у меня нужная инфа для подключения к базе SQL, откуда данные берутся.
Включить в сборку его вроде никак нельзя...
Как встроить содержимое конфига в сборку, чтобы все в dll было?
Код App.config (сформирован автоматически вместе с ADO.NET Entity Data Model):
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
  <!-- For more information on Entity Framework configuration, visit [url]http://go.microsoft.com/fwlink/?LinkID=237468[/url] --></configSections>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
  </startup>
  <connectionStrings>
    <add name="SalesTablesEntities" connectionString="***********************" providerName="System.Data.EntityClient" />
  </connectionStrings>
  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
      <parameters>
        <parameter value="mssqllocaldb" />
      </parameters>
    </defaultConnectionFactory>
    <providers>
      <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
    </providers>
  </entityFramework>
</configuration>
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
01.06.2017, 15:38
Ответы с готовыми решениями:

Кавычки в app.config
Как записать значение в кавычках в конфигурационный фаил? Мне надо, чтобы слово &quot;internet&quot; считывалось потом из...

Шифрование app.config
Есть winform приложение, в нем есть app.config с информацией, которую нужно скрыть от конечных пользователей (connection string и др.)...

Изменить данные в app.config
Всем привет. Написал приложение, которое копирует определенные файлы с одной папки в другую. Для того чтобы потом могли изменять путь,...

22
Эксперт .NET
 Аватар для Usaga
14099 / 9316 / 1349
Регистрация: 21.01.2016
Сообщений: 34,991
01.06.2017, 16:41
SHIFT_969, нужно продублировать используемые настройки в settings или в ресурсы и спокойно пользоваться. Данные, конечно же, уже не будут доступны через ConfigurationManager, но это не есть проблема ниразу.
0
Злой самаритянин
182 / 182 / 94
Регистрация: 24.04.2014
Сообщений: 686
01.06.2017, 16:47  [ТС]
Цитата Сообщение от Usaga Посмотреть сообщение
продублировать используемые настройки в settings или в ресурсы
Вот что-то я и не могу найти - как это делается. Есть мануал?
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
01.06.2017, 16:52
Цитата Сообщение от SHIFT_969 Посмотреть сообщение
как это делается.
SHIFT_969, подскажу простой путь.
Корректный Xml можно привести к коду модели (даже в сети есть конвертеры). Так вот, сделайте в своей dll набор нужных классов, а файл конфига грузите в ресурсы, как сказано выше. Когда требуется-десериализуйте Xml форматтером ваш конфиг в объекты и пользуйтесь его свойствами. Просто это будет более удобно, чем просто парсить Xml, плюс строгая типизация.
1
Эксперт .NET
 Аватар для Usaga
14099 / 9316 / 1349
Регистрация: 21.01.2016
Сообщений: 34,991
01.06.2017, 16:56
insite2012, даже этого не требуется. Насколько я понял, ТС-у нужно просто строку подключения сохранить в ресурсах и всё. Просто строку. Тут даже без ресурсов можно обойтись, просто строку в коде где-нибудь зашить и всё.

Добавлено через 2 минуты
SHIFT_969, вы же представляете, что такое строка подключения?..
1
Злой самаритянин
182 / 182 / 94
Регистрация: 24.04.2014
Сообщений: 686
01.06.2017, 20:26  [ТС]
Цитата Сообщение от Usaga Посмотреть сообщение
SHIFT_969, вы же представляете, что такое строка подключения?..
<connectionStrings>? Я ее звездочками замазал. И куда его?

Есть такая идея: поместить файл App.config в папку на сервере, а в коде к нему обратиться и получить инфу. Можно так сделать? Доступ к файловой системе на сервере из кода у меня есть, проверял.

Не по теме:

пишу уже с другого компа, нет возможности самому проверить

0
Эксперт .NET
 Аватар для Usaga
14099 / 9316 / 1349
Регистрация: 21.01.2016
Сообщений: 34,991
02.06.2017, 08:13
SHIFT_969, вообще никуда. Когда будете создавать контекст EF, строку подключения можно передать в конструктор контекста:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
... 
 
class MyAwesomeContext: DbContext {
    public MyAwesomeContext(string connString) : base(connString){}
    // всё остальное
}
 
...
 
using(var cont = new MyAwesomeContext("Server=my-db;Initial Catalog=SomeDb;Integrated Security=True")) {
    // Работаем с БД
}
using(var con
1
Злой самаритянин
182 / 182 / 94
Регистрация: 24.04.2014
Сообщений: 686
02.06.2017, 12:19  [ТС]
Usaga, System.ArgumentException: Keyword not supported: 'server'.
У меня вообще "data source" там прописан, но с ним такая же ошибка.

Я вижу, что он еще может принимать абстрактный класс DbConnection. Пробовал кинуть ему SqlConnection, но его конструктор еще меньше принимает
0
Эксперт .NET
 Аватар для Usaga
14099 / 9316 / 1349
Регистрация: 21.01.2016
Сообщений: 34,991
02.06.2017, 12:25
SHIFT_969, вам нужно корректную строку подключения передать. Ту же, что была в app.config.
0
Злой самаритянин
182 / 182 / 94
Регистрация: 24.04.2014
Сообщений: 686
02.06.2017, 12:27  [ТС]
Usaga, я ее и передавал. Исключение:
Кликните здесь для просмотра всего текста
System.ArgumentException: Keyword not supported: 'data source'.
в System.Data.Entity.Core.EntityClient.Int ernal.DbConnectionOptions.ParseInternal( IDictionary`2 parsetable, String connectionString, IList`1 validKeywords)
в System.Data.Entity.Core.EntityClient.Int ernal.DbConnectionOptions..ctor(String connectionString, IList`1 validKeywords)
в System.Data.Entity.Core.EntityClient.Ent ityConnection.ChangeConnectionString(Str ing newConnectionString)
в System.Data.Entity.Internal.LazyInternal Connection.Initialize()
в System.Data.Entity.Internal.LazyInternal Connection.CreateObjectContextFromConnec tionModel()
в System.Data.Entity.Internal.LazyInternal Context.InitializeContext()
в System.Data.Entity.Internal.InternalCont ext.GetEntitySetAndBaseTypeForType(Type entityType)
в System.Data.Entity.Internal.Linq.Interna lSet`1.Initialize()
в System.Data.Entity.Internal.Linq.Interna lSet`1.get_InternalContext()
в System.Data.Entity.Infrastructure.DbQuer y`1.System.Linq.IQueryable.get_Provider( )
в System.Linq.Queryable.Where[TSource](IQueryable`1 source, Expression`1 predicate)
в SalesTablesConnection.GetSales.GetSalesT oFill(String[] ids)
в SalesTablesConnection.GetSales.Execute(I ServiceProvider serviceProvider)
0
Эксперт .NET
 Аватар для Usaga
14099 / 9316 / 1349
Регистрация: 21.01.2016
Сообщений: 34,991
02.06.2017, 12:35
Вы модель данных генератором сформировали, как я понял?
0
Злой самаритянин
182 / 182 / 94
Регистрация: 24.04.2014
Сообщений: 686
02.06.2017, 13:50  [ТС]
Нагуглил, что это из-за &quot; в строке, заменил их на одинарные кавычки, запрос проходит...

Добавлено через 1 час 10 минут
И теперь ему не хватает entityFramework...
Кликните здесь для просмотра всего текста
System.Data.Entity.Core.MetadataExceptio n: Schema specified is not valid. Errors:
AXSalesTablesModel.ssdl(2,2) : error 0152: No Entity Framework provider found for the ADO.NET provider with invariant name 'System.Data.SqlClient'. Make sure the provider is registered in the 'entityFramework' section of the application config file. See http://go.microsoft.com/fwlink/?LinkId=260882 for more information.
в System.Data.Entity.Core.Metadata.Edm.Sto reItemCollection.Loader.ThrowOnNonWarnin gErrors()
в System.Data.Entity.Core.Metadata.Edm.Sto reItemCollection.Loader.LoadItems(IEnume rable`1 xmlReaders, IEnumerable`1 sourceFilePaths)
в System.Data.Entity.Core.Metadata.Edm.Sto reItemCollection.Init(IEnumerable`1 xmlReaders, IEnumerable`1 filePaths, Boolean throwOnError, IDbDependencyResolver resolver, DbProviderManifest& providerManifest, DbProviderFactory& providerFactory, String& providerInvariantName, String& providerManifestToken, Memoizer`2& cachedCTypeFunction)
в System.Data.Entity.Core.Metadata.Edm.Sto reItemCollection..ctor(IEnumerable`1 xmlReaders, IEnumerable`1 filePaths)
в System.Data.Entity.Core.Metadata.Edm.Met adataCache.LoadStoreCollection(EdmItemCo llection edmItemCollection, MetadataArtifactLoader loader)
в System.Lazy`1.CreateValue()
в System.Lazy`1.LazyInitValue()
в System.Data.Entity.Core.Metadata.Edm.Met adataWorkspace.LoadAndCheckItemCollectio n[T](Func`1 itemCollectionLoader)
в System.Lazy`1.CreateValue()
в System.Lazy`1.LazyInitValue()
в System.Data.Entity.Core.Metadata.Edm.Met adataWorkspace.GetItemCollection(DataSpa ce dataSpace, Boolean required)
в System.Data.Entity.Core.Metadata.Edm.Met adataWorkspace.GetItemCollection(DataSpa ce dataSpace)
в System.Data.Entity.Core.Objects.ObjectCo ntext.InitializeMappingViewCacheFactory( DbContext owner)
в System.Data.Entity.Core.Objects.ObjectCo ntext..ctor(EntityConnection connection, Boolean isConnectionConstructor, ObjectQueryExecutionPlanFactory objectQueryExecutionPlanFactory, Translator translator, ColumnMapFactory columnMapFactory)
в System.Data.Entity.Internal.InternalConn ection.CreateObjectContextFromConnection Model()
в System.Data.Entity.Internal.LazyInternal Context.InitializeContext()
в System.Data.Entity.Internal.InternalCont ext.GetEntitySetAndBaseTypeForType(Type entityType)
в System.Data.Entity.Internal.Linq.Interna lSet`1.Initialize()
в System.Data.Entity.Internal.Linq.Interna lSet`1.get_InternalContext()
в System.Data.Entity.Infrastructure.DbQuer y`1.System.Linq.IQueryable.get_Provider( )
в System.Linq.Queryable.Where[TSource](IQueryable`1 source, Expression`1 predicate)
в SalesTablesConnection.GetSales.GetSalesT oFill(String[] ids)
в SalesTablesConnection.GetSales.Execute(I ServiceProvider serviceProvider)


Добавлено через 4 минуты
Цитата Сообщение от SHIFT_969 Посмотреть сообщение
Есть такая идея: поместить файл App.config в папку на сервере, а в коде к нему обратиться и получить инфу. Можно так сделать? Доступ к файловой системе на сервере из кода у меня есть, проверял.
И все-таки, такой вариант можно реализовать?
0
Эксперт .NET
 Аватар для Usaga
14099 / 9316 / 1349
Регистрация: 21.01.2016
Сообщений: 34,991
02.06.2017, 13:56
Лучший ответ Сообщение было отмечено SHIFT_969 как решение

Решение

SHIFT_969, это и есть Entity Framework, ему не хватает информации о поставщике данных, которая была в App.config. Надо погуглить как это обойти. Такое возникает только при использовании сгенерированной модели.

Если переписать всё в Code First, то будет достаточно только строки подключения. Даже так: переписывать необязательно, можно сгенерировать.

Добавлено через 1 минуту
Цитата Сообщение от SHIFT_969 Посмотреть сообщение
И все-таки, такой вариант можно реализовать?
Нет. app.config только один - у исполняемого модуля (EXE) или у "главной" библиотеки, с которой началось выполнение веб-приложения (web.config).

Генерируйте (или пишете) модель из базы данных, но используйте вариант Code First.
1
Злой самаритянин
182 / 182 / 94
Регистрация: 24.04.2014
Сообщений: 686
02.06.2017, 15:16  [ТС]
Usaga, сгенерировал новую модель Code First. В отладке на моем компе прекрасно работает, а плагином выдает все то же исключение про entityFramework.
0
Эксперт .NET
 Аватар для Usaga
14099 / 9316 / 1349
Регистрация: 21.01.2016
Сообщений: 34,991
02.06.2017, 16:01
SHIFT_969, я задам один очень идиотский вопрос: а библиотеки EF-а вы рядом с плагином положить не забыли?)) Это я просто уточняю, всякое бывает.
0
Злой самаритянин
182 / 182 / 94
Регистрация: 24.04.2014
Сообщений: 686
02.06.2017, 16:31  [ТС]
Цитата Сообщение от Usaga Посмотреть сообщение
библиотеки EF-а вы рядом с плагином положить не забыли?
Цитата Сообщение от SHIFT_969 Посмотреть сообщение
Он встраивается туда как один файл *.dll, поэтому сторонних файлов библиотек и конфигов там быть не может (на диске не позволяет разместить, только в базе). Далее работает на сервере. Ну библиотеки я включил в GAC
Только так. Ну и учитывая то, что EF я грузил через NuGet, он мне создал packages.config:
Кликните здесь для просмотра всего текста
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="EntityFramework" version="6.1.3" targetFramework="net452" />
<package id="Microsoft.IdentityModel" version="6.1.7600.16394" targetFramework="net452" />
</packages>

(откуда там IdentityModel я уже и не помню, но трогать не буду)))
Соответственно я не знаю - может ли он вообще достучаться к ней через GAC... Хотя к другим вроде может. Microsoft.Xrm.Sdk.dll, например, используется. Через GAC.

Добавлено через 3 минуты
Кстати, я еще пробовал склеивать билд ILMerge-ем, но тогда плагин не может найти мою точку входа, т. к. там несколько dll...
0
Эксперт .NET
 Аватар для Usaga
14099 / 9316 / 1349
Регистрация: 21.01.2016
Сообщений: 34,991
02.06.2017, 16:40
SHIFT_969, packages.config используется только для сборки. В релизе оно не учавствует.

По идее, к GAC-у должен быть полный доступ. Там доверенные библиотеки лежат.

Попробуйте свою библиотечку (или кастрированный, экспериментальный вариант) использовать в другом своём проекте. И что бы EF в гаке и без app.config это библиотеки.

И что за CRM такая?
0
Злой самаритянин
182 / 182 / 94
Регистрация: 24.04.2014
Сообщений: 686
02.06.2017, 16:52  [ТС]
Usaga, MS Dynamics CRM 2015
0
Злой самаритянин
182 / 182 / 94
Регистрация: 24.04.2014
Сообщений: 686
05.06.2017, 16:54  [ТС]
Не, судя по описанию ошибки ему не хватает именно этой секции из App.config:
XML
1
2
3
4
5
6
7
8
9
10
  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
      <parameters>
        <parameter value="mssqllocaldb" />
      </parameters>
    </defaultConnectionFactory>
    <providers>
      <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
    </providers>
  </entityFramework>
Вот эту инфу мне бы в код перенести...
Или я все-таки что-то не так прописал?
Make sure the provider is registered in the 'entityFramework' section of the application config file.
Добавлено через 8 минут
Как-то прописать в строке подключения? Никак не могу найти формат, по которому она составляется
0
Эксперт .NET
 Аватар для Usaga
14099 / 9316 / 1349
Регистрация: 21.01.2016
Сообщений: 34,991
05.06.2017, 16:55
SHIFT_969, да по идее, всё то вы прописали.

EF совершенно точно может работать без конфига. Я использовал его так в нескольких проектах. И на работе мы EF в коде конфигурируем. Я не знаю, как у вас так получается, что EF ругается. Может вам это поможет.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
05.06.2017, 16:55
Помогаю со студенческими работами здесь

Присоединение app.config к exe файлу
Добрый день уважаемые форумчане. Подскажите пожалуйста, есть ли возможность сделать так, чтобы пользователь не видел файл app.config?...

Сохранить в App.config значения переменных
Добрый день! Дан следующий кусочек кода: //TODO: Hardcoded IP, ports move to configuration file...

Как правильно добавить информацию в app.config?
Добрый день! Необходимо, чтобы парсер мог скачивать страницы через прокси. Сейчас выдает ошибку: The remote server returned an...

Приложение не читает настройки из app.exe.config
Здравствуйте! Такое вопрос: скомпиленое приложение , не мое, настройки должны считаться из конфиг файла, который лежит рядом. Изменяются...

Запись в app.Config (Properties.Settings) - не хочет ?
Здравствуйте, пытаюсь записать значение: MyApplicat.Properties.Settings.Default.ExeVersion = &quot;5.1.2&quot;; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru