Winform app:Compiled App.Config-like文件?

时间:2015-11-24 12:13:02

标签: c# winforms

我想知道是否有某种内置编译的“App.Config”文件?

目标是能够让我们的库中的某个库在某些客户端应用程序中使用时可以覆盖其某些默认值。 Thoses动态加载,所以我不能只在构造函数中给出一个参数。

我不想使用App.config文件,因为用户可以编辑这些值(否则就可以了。)

2 个答案:

答案 0 :(得分:1)

有几种不同的方法可以解决这个问题。

如果您喜欢配置文件的想法,但不希望最终用户可以在已编译的应用程序中访问它,也许您可​​以以适合您需要的格式创建自己的设置文件,并将其包含为嵌入式资源?

这样做的好处是,您可以将其作为常规XML或配置文件或Visual Studio中的任何内容进行访问,同时它将从最终用户隐藏。我个人认为我更喜欢使用特殊的代码/类来存储配置数据。

要将文件包含为嵌入式资源,请将其包含在一个Visual Studio项目中,右键单击包含的文件并选择Properties。现在在Build Action下,选择Embedded Resource。现在构建项目时,该文件将内部包含在生成的.dll文件中。

我相信你能够找到很多关于如何从代码访问嵌入式资源的信息。例如,有一些useful examples in this SO question。请特别注意this answer,其中还提到了包含资源的替代方法。

答案 1 :(得分:0)

扩展我的评论...你可以为具有硬编码值的设置类创建一个接口,然后对该接口进行不同的实现。要实际更改要使用的是哪一个,您需要做的就是在构建dll之前注释/取消注释将对象实例化为设置变量的行:

#If

找到"解决这个问题的内置方式",如你所说,也许这对你有用......

您实际上可以使用Visual Studio构建配置管理器来构建不同的设置。使用public MainDllProject() { #If DEBUG Then this.m_Settings = new DebugSettings(); #ElseIf this.m_Settings = new DeploySettings(); #End if } 指令,您可以根据配置自动选择要使用的代码行。一个基于默认调试配置的简单示例,它添加" DEBUG = True"自动变量:

#If CLIENTDEPLOY Then

您实际上可以创建自己的自定义命名变量,就像DEBUG一样:在进行配置后,打开Project properties窗口,转到Compile选项卡,在下拉列表中选择该特定配置,然后在底部选择&#34;高级编译选项&#34;。有一条线&#34;自定义常数&#34;您可以在其中添加此类变量。对于简单的if语句,您只需创建一个类似&#34; CLIENTDEPLOY = True&#34;的布尔值,然后就可以在代码中使用<div class="contents"> <p class="content">Lorem ipsum dolor sit amet, vidisse deseruisse vim an, mel ad dolores accusata deseruisse. Integre civibus comprehensam his at. Tibique iracundia cu vel, has at luptatum scriptorem. Autem causae omnesque eos te. Mel ad reque noster. Feugiat eleifend maiestatis ut per, maluisset consulatu est ea.</p> <p class="content">Sea no cibo praesent. Partem scribentur te eum. Ius in odio mucius, praesent delicatissimi vis ei, mel eu iuvaret honestatis. Cu tantas omnium necessitatibus eam.</p> <p class="content">Ut mea ubique putant perfecto. Debet audiam electram vis eu, doctus contentiones ea usu. Cu qui legere possim corrumpit. Quo utinam disputando te, vix decore accusam reprehendunt ex, vis eu mutat delenit. Mel ad nulla vivendum, reprimique voluptatibus et sea.</p> </div>