2014-01-16 47 views
5

我写一个Web API 2.0项目,并使用Visual Studio 2013年如何使C#项目的设置成为用户特定的?

在测试项目的测试项目,我保存(在Solution Explorer下TestProject->属性)在Settings.settings文件中的一些信息。保存在那里的东西之一是连接到本地存储的数据库的字符串。

不幸的是,当他们下载回购时,连接字符串在每个人的计算机上会略有不同。当人们将他们的代码推送到master repo时,它会覆盖连接字符串,影响其他人。

什么是最好的方式,使每个用户都可以配置这样每个人都可以拥有自己的数据库路径,但推动主repo不会影响任何人?

编辑

我不认为这是完全的that other question重复。虽然,是的,我的配置设置存储在app.config中(因为它们恰好是应用程序设置而不是用户设置),但在其他答案中解决方案后,会导致我遇到同样的问题。 app.config将包含configSource =“otherconfig.config”,当人们将文件推送到master repo时,它仍然会摧毁其他人的价值。我需要的东西可以让自定义配置在不影响项目其他用户的情况下进行源代码控制。

+0

@George我认为你的副本不是重复的。这个问题是关于Visual Studio中的设置的。您链接到的问题是关于应用程序配置文件。不是一回事。 –

+1

'otherconfig.config'不能在源代码控制中,每个用户都需要有自己的。 –

+0

@George我意识到这一点,这就是为什么我说这不是我的问题的答案。我想要一些源代码控制的东西,以便每个用户都能够恢复和更改变化。 –

回答

5

的Visual Studio的Web项目自动处理此通过Web.config文件转换

你需要安装一个单独的插件用的App.config和非web项目中使用。 http://visualstudiogallery.msdn.microsoft.com/579d3a78-3bdd-497c-bc21-aa6e6abbc859 该插件基本上将相同的功能添加到app.config文件,并在转换文件中使用相同的语法。

对此的最佳方法是使用生成配置文件。有一个特定于开发人员的Web.developer.config,并让每个用户在配置管理器中选择其名称。然后,只需创建新配置,这在技术上就是XSLT,为每个团队成员进行所需的更改。

把它看作Debug vs Release配置,除非你的情况下你会有很多Debug(每个用户一个)。您设置的构建配置文件不会被检入到TFS中,所以您没有问题。

这是一个subconfig的样子:在网络

<?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> 

更多信息。config转换 http://www.hanselman.com/blog/ManagingMultipleConfigurationFileEnvironmentsWithPreBuildEvents.aspx

+0

这是否也适用于app.config?测试项目没有web.config,因为它不是一个Web项目。 –

+0

是的.config文件在构建/运行时过程中由Visual Studio转换和使用。如果您需要,我可以发布一些示例 –

+0

Hanselman的博客似乎认为我需要一个名为SlowCheetah的插件来提供您建议的内容http://www.hanselman.com/blog/SlowCheetahWebconfigTransformationSyntaxNowGeneralizedForAnyXMLConfigurationFile.aspx –

1

我处理这个问题的方法是在我的应用程序中添加一个文件夹,该文件夹只包含不包含在构建/发布中的资源。我在该文件夹中包含的其中一项内容是我的每个开发人员的DeveloperName.App.config文件。然后,我将实际的App.config文件从源代码管理中删除。当他们签出项目时,他们将其个性化DeveloperName.App.config文件复制到项目文件夹并将其重命名为App.config

这并不完美,但它至少能让您找到大部分您想要的目标:开发者各自拥有自己的App.config文件,他们可以维护并保持源代码管理。他们对App.config所做的更改不会在每次入住时打破对方。

+0

是的,这基本上是我的后备解决方案,除了可能找出一个环境变量的方式。 –

相关问题