为了处理不同部署目标的设置,我将应用程序设置从app.config移到了它自己的文件中,并通过configSource将该文件包含在app.config中。我还创建用于每个target.Here一个设置文件是一个例证:多个.NET配置文件和安装项目问题
Project A
app.config (references settings.config)
settings.config
settings.Release.config
settings.Debug.config
在生成后,我复制适当的设置{配置}的.config到输出目录。目前为止工作正常,我可以在项目输出目录中看到settings.config文件,其中包含当前版本配置的设置:发布,调试等。
但是,我遇到了安装项目的问题,有这个项目(项目A)。最初,它不包括settings.config文件。因此,我将settings.config文件的构建操作设置为内容,并将项目A的内容文件添加到安装项目中。这确保了setup.config文件包含在设置中。但是,由于安装项目似乎是从项目目录而不是输出目录中选取settings.config文件,因此设置中包含的settings.config文件不是它应该包含的内容。我希望输出目录中的那个包含在安装程序中,因为那一个对于当前的构建配置是正确的。我尝试了以下方法:
- 将settings.config添加为安装项目的文件。但是,似乎我只能指定绝对路径。因此,当我从特定构建配置(..bin \ debug \ settings.config)的输出目录中添加它时,它在其他构建配置中不起作用,因为(..bin \ debug \ settings.config)确实存在于指定的目录。我研究了在安装项目中使用相对路径或动态路径,其中构建配置可以被指定为路径的一部分,但我找不到任何东西。
我认为使用预生成事件实际修改在项目目录的settings.config文件,然后把它复制了输出目录通过其“复制到输出目录”设置为始终复制或是否有更新的复制。这应该确保将相应的settings.config复制到输出目录,就像基于后构建的解决方案一样,并且还应该确保settings.config文件的内容在安装项目包含之前已更新。但是,我不喜欢这个解决方案,因为我必须确保settings.config文件是可写的,然后才能进行任何更改,因为它是源代码管理的。如果它是只读的,那么我需要将其翻转为可写,进行更改,然后将其设置为只读。这增加了额外的复杂性。
我想知道是否有人有一个更好的主意或知道一个安装项目的技巧,允许我包括settings.config文件适合当前生成配置在安装程序。
感谢
我不知道这可能对你有多大帮助,但是你可以试试MSBuild脚本,在编译projet之前实现你的配置文件“开关”。 2年前,我看到了类似这样的东西,但是它嵌入了Pearl的几条线中,以达到目前为止我所见过的最复杂的构建脚本之一。但是你应该能够为你的项目做更简单的事情。 – 2009-05-27 17:03:25