如何在C#项目中嵌入app.config?

如何在C#项目中嵌入app.config?,c#,C#,编译C#项目时,app.config中的应用程序设置将与exe文件一起保存。例如,如果程序名为“solve_np.exe”,它旁边将有一个“solve_np.exe.config”,使它看起来不像我希望的那么整洁。如何将其嵌入到.exe中 我试图将构建操作设置为嵌入资源,但没有成功。啊哈。我猜你是因为VisualStudio自动将不希望最终用户配置的内容放入配置中而受到了影响 在这种情况下,请使用资源。只需添加一个.resx类型的新文件。有了它,您可以向资源文件添加字符串和图像等内容。构建此文件

编译C#项目时,app.config中的应用程序设置将与exe文件一起保存。例如,如果程序名为“solve_np.exe”,它旁边将有一个“solve_np.exe.config”,使它看起来不像我希望的那么整洁。如何将其嵌入到.exe中


我试图将构建操作设置为嵌入资源,但没有成功。

啊哈。我猜你是因为VisualStudio自动将不希望最终用户配置的内容放入配置中而受到了影响

在这种情况下,请使用资源。只需添加一个.resx类型的新文件。有了它,您可以向资源文件添加字符串和图像等内容。构建此文件后,它应该提供对资源的静态访问(它通常会从资源中为您生成一个代码文件,这样您就不必自己访问ResourceManager)

例如,如果我在构建后使用名为MyConfigValue的字符串创建resources.resx,我应该能够访问以下内容:

textBox.Text = Resources.MyConfigValue;
如果您想要的值是可变的,但不应该是可配置的,那么这就是放置它们的正确位置


HTH.

我同意serhio darasd和Quibbledsome的观点,但你可以删除“solve\u np.exe.config”,它只使用默认配置。

将app.config文件与你的exe一起提供并不是不专业的。我想你要找的词是不整洁的。我个人不认为这是我自己的情况,但每个人都是不同的!也许您可以简单地在默认情况下隐藏app.config文件


或者另一种选择是创建自己的配置文件,您可以将其保存到App Data文件夹,甚至可以将设置存储在注册表中。

配置文件的一般原理是,它存储部署应用程序后可能需要更改的设置(例如用户首选项)。为此,您需要存储在应用程序外部的某个位置。如果使用默认设置,将获得“[Your].exe.config”。还有很多其他的选项可以选择,但是几乎每一个都有一个文件写在某个地方,如果你提供了一个保存某种设置的机制。

这是另一个需要考虑的因素。经验丰富的.Net开发人员习惯于标准应用程序设计,该设计在web应用程序和桌面应用程序中使用配置文件。如果您偏离了这种做法,您将使任何跟随您的开发人员更难理解您所做的事情。甚至web服务器上的sa也可能因为缺少配置文件而感到困惑


因为几乎每个人都是这样做的,所以您的代码在其他人看来并不“凌乱”。相反,如果在预期的位置看不到配置文件,那将是一件令人困惑的事情。

在考虑了这些注释和其他搜索中所写的内容之后,我决定,解决我希望实体框架连接字符串嵌入到可执行文件中的问题的最佳方法是创建一个派生类,如:

Public Class MyEFDataContainerLocal
   Inherits MyEFDataContainer

    Public Sub New()
        MyBase.New(My.Settings.MyEFContainerConnectionString)
    End Sub
End Class
我刚刚创建了一个ConnectionString类型的应用程序设置,它包含与App.Config文件中的字符串相同的字符串。我只需要更换
"e


然后,每当我想将MyEFDataContainer作为新的MyEFDataContainer使用时,我只会将MyEFDataContainer作为新的MyEFDataContainerLocal使用。

为了不让人们感到不安,我重新措辞了这个问题。我没有感到不安。我只是想知道你为什么认为这不专业。这可能是人们(包括我在内)误解你问题背后的原因的关键。您在“配置”文件中存储了什么样的数据?类似于“用户不需要更改配置时不太整洁”的内容是我从一开始就应该编写的,而不是“不专业”。我很抱歉不清楚。在.config中结束的数据是VS生成的。总的来说,aaronls描述的正是我想说的。Thx,我想我会这么做的。每当VS在配置文件中添加内容时,我都会将自己的版本作为资源,并将引用从配置文件重定向到资源。我在“配置”文件中存储的唯一数据是,它不应该在.NET 4.0上运行,因为它至少需要4.5.2。微软故意让你很难判断你实际运行的是哪个版本,这使得解决问题变得相当困难。我相信其他想要嵌入app.config的人也面临着类似的烦恼,并且有很好的理由嵌入它。+1让registry作为一个选项来真正回答OP的问题(我不是很喜欢这个选项)。在.Net中有一些东西是默认配置在app.config中的,但是用户不需要更改它。例如,企业库加密密钥和算法。能够选择将其嵌入到您的exe中会很好,因为用户很容易丢失app.config并破坏exe。