我正在使用Visual Studio 2013编写Web API 2.0项目和测试项目。
在测试项目中,我在Settings.settings文件中保存了一些信息(在TestProject->解决方案资源管理器中的属性下)。保存在其中的一件事是连接字符串到本地存储的数据库。
不幸的是,当他们下载回购时,每个人的计算机上的连接字符串会略有不同。当人们将他们的代码推送到主仓库时,它会覆盖连接字符串,影响其他人。
为每个用户配置这样的最佳方法是什么,这样每个人都可以拥有自己的数据库路径,但推送到主回购不会影响任何人?
修改
我认为这不完全是that other question的重复。虽然,是的,我的配置设置存储在app.config中(因为它们恰好是应用程序设置而不是用户设置),在其他答案中的解决方案将导致我出现同样的问题。 app.config将包含configSource =“otherconfig.config”,当人们将该文件推送到主仓库时,它仍然会破坏其他人的值。我需要一些允许自定义配置来源控制的东西,而不会影响项目的其他用户。
答案 0 :(得分:5)
Visual Studio通过Web.config转换自动处理WEB项目
您需要安装一个单独的插件,以便与App.config和非Web项目一起使用。 http://visualstudiogallery.msdn.microsoft.com/579d3a78-3bdd-497c-bc21-aa6e6abbc859 该插件基本上为app.config文件添加了相同的功能,并在转换文件中使用相同的语法。
您最好的方法是使用构建配置文件。拥有特定于开发人员的Web.developer.config,然后让每个用户在Configuration Manager中选择他们的名字。然后只需创建新的配置,从技术上讲,这是一个XSLT,可以为每个团队成员进行更改。
将其视为Debug vs Release配置,除非在您的情况下您将拥有许多Debug(每个用户一个)。你设置的Build配置文件没有被检入TFS,所以你很好。
这是子配置的样子:
<?xml version="1.0" encoding="utf-8"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
<!--
In the example below, the "SetAttributes" transform will change the value of
"connectionString" to use "ReleaseSQLServer" only when the "Match" locator
finds an attribute "name" that has a value of "MyDB".
-->
<connectionStrings>
<add name="RavenDB" connectionString="Url=http://xxx/databases/xxx" xdt:Transform="Replace" xdt:Locator="Match(name)"/>
</connectionStrings>
<appSettings>
<add key="BaseUrl" value="http://xxx" xdt:Transform="SetAttributes" xdt:Locator="Match(key)"/>
</appSettings>
<system.net>
<defaultProxy enabled="true" />
<mailSettings>
<smtp xdt:TrandeliveryMethod="Network" transform="Replace">
<network xdt:Transform="Replace" host="xxx" defaultCredentials="true" />
</smtp>
</mailSettings>
</system.net>
</configuration>
有关web.config转换的更多信息 http://www.hanselman.com/blog/ManagingMultipleConfigurationFileEnvironmentsWithPreBuildEvents.aspx
答案 1 :(得分:1)
我处理此问题的方法是在我的应用中添加一个文件夹,该文件夹只包含未包含在构建/发布中的资源。我在该文件夹中包含的一件事是我的每个开发人员的DeveloperName.App.config
个文件。然后我将实际的App.config
文件保留在源代码管理之外。当他们签出项目时,他们将个性化的DeveloperName.App.config
文件复制到项目文件夹,并将其重命名为App.config
。
这并不完美,但它至少为您提供了您正在寻找的大多数目标:开发人员各自获得他们自己可以维护的App.config
文件并保持源代码管理。他们对App.config
所做的更改不会在每次办理登机手续时互相破坏。