如何在VS2010 C#控制台应用程序中将我的App.config编译到我的exe中?

Pat*_*hes 30 .net c# console-application visual-studio-2010 .net-3.5

我正在使用c#在Visual Studio 2010中创建一个控制台应用程序.我希望这个应用程序是独立的,因为你需要的只是exe,你可以从任何地方运行它.我还想使用app.config来存储连接字符串等.

我的问题是我似乎无法弄清楚如何将app.config数据包含到已编译的exe中.我确实看到它创建appname.exe.config,但我不希望人们在获取应用程序时不必担心抓取两个单独的文件.

我所做的谷歌搜索都没有想出任何东西.这甚至可能吗?

Bil*_*eal 12

你不能.此类配置文件的一半要点是允许在应用程序本身之外更改应用程序的配置.

您只需修改程序,使其不依赖于应用程序配置文件 - 最简单的方法是将配置中的值粘贴到只读全局变量中.

  • 虽然+1,但问题是当一个工具把东西放到app.config中时,而不是你(例如当你添加对web服务的引用时).用户绝对不要触摸它,但它必须在单独的文件中发送.奖励愚蠢:常规应用程序设置(包括连接字符串)确实嵌入到exe中 - 您可以单独发送exe并且它将连接到数据库.但是Web服务引用的设置不会嵌入,只要引用它,就必须分发`.config`.这只是愚蠢的. (10认同)
  • 更糟糕的是,当你需要app.config的唯一原因是确保你的程序拒绝在.NET 4.0上运行时 - 因为某些原因,微软无法在程序集本身标记4.5.2要求...... (8认同)
  • app.config设置错误的另一个例子:启用`useLegacyJit`,因为你有代码[像这样](https://github.com/dotnet/coreclr/issues/2053#issuecomment-156843937),直到今天在Win10上崩溃由于RyuJIT错误.想要作为单个exe发布的程序无法访问解决方法,这在任何意义上都不是用户设置. (2认同)

Ala*_*son 9

我可以看到你要去哪里,但答案可能比你想要的要复杂一些.

  1. 使app.config成为嵌入式资源.
  2. 手动解析app.config以获取默认的应用程序设置/连接字符串/等
  3. 仍然查找app.config并覆盖您之前使用app.config值读取的默认值

这样你有一些合理的默认值,你没有必要将app.config作为常量保持独立,你可以将你的应用程序作为一个exe运行,你仍然可以通过在app.config中添加回来在运行时修改它. .

要记住的一件事是,从资源中读取app.config不会给你与普通app.config相同的行为.您基本上是在阅读并手动使用它.

  • Ug,是的,这里的想法让事情变得更容易,而不是更难.看起来我最好只在我的代码中创建一个设置对象. (2认同)

Ali*_*tad 5

你的意思是你需要将它作为资源添加到exe?好吧,首先你不能,app.config是基于文件而不是基于资源的.

另一方面,配置文件的唯一要点是您可以更改它.否则只需硬编码或使用常量.