Как создать единый exe-файл без app.dll.config?
Несмотря на выбор "Создать отдельный файл" в параметрах профиля публикации, в результате всё равно VS рядом с appName.exe создаёт файлы appName.dll.config и appName.pdb. И если pdb-файл, как я понимаю, нужен только для отладки и может быть спокойно удалён, то без config-файла приложение работать не будет.
appName.dll.config был создан автоматически и хранит информацию с первоначальными настройками, установленными мной в Properties.Settings.
Так как всё-таки перенести config в exe? Или изменить способ хранения настроек, чтобы не требовались дополнительные файлы вовсе?
Ответы (2 шт):
При необходимости конфигурацию "зашить" в исполняемый файл, для этого в файле проекта нужно добавить следующие строчки:
<Target Name="PreBuild" BeforeTargets="PreBuildEvent">
<Exec Command="copy $(TargetDir)\$(TargetName).dll.config $(ProjectDir)\$(TargetName).dll.config" />
</Target>
<ItemGroup>
<None Remove="appName.dll.config" />
<EmbeddedResource Include="appName.dll.config">
<LogicalName>appName.dll.config</LogicalName>
</EmbeddedResource>
</ItemGroup>
Содержимое файла можно получить например вот через такую функцию:
public static string LoadDllConfig()
{
var assembly = AssemblyLoadContext.All.SelectMany(alc => alc.Assemblies).Single(asm => asm.GetManifestResourceNames().Any(resourceName => resourceName.EndsWith(".dll.config")));
var resourceName = assembly.GetManifestResourceNames().Single(resourceName => resourceName.EndsWith(".dll.config"));
using var streamReader = new StreamReader(assembly.GetManifestResourceStream(resourceName)!);
return streamReader.ReadToEnd();
}
Всем спасибо за советы. Проблему решило удаление файла user.config в AppData, оставшегося от предыдущей публикации. После этого удаление appName.dll.config не мешает работе приложения.

