推荐的C#.Net项目配置,用于跨多台计算机共享项目

时间:2009-10-09 04:43:40

标签: c# .net visual-studio

我是唯一一个开发ASP.Net MVC项目的开发人员,但会在开发过程中在多台计算机上共享它。我正在使用VS 2008并将支持Subversion或Git。我正在寻找有关如何配置项目依赖项和web.config文件的建议,以减轻系统之间转换的痛苦。

我的web.config文件提供了系统之间可能不同的数据库连接字符串。推荐使用什么方法将其推迟到dev环境?

我的测试项目依赖于NUnit,Moq以及其他库。如果这些库的位置在开发系统中有所不同,那么这会破坏引用吗?如果是这样,我该如何缓解这个问题呢?

5 个答案:

答案 0 :(得分:2)

  

我的web.config文件提供了   可能的数据库连接字符串   系统之间有所不同。什么是   建议的方法推迟这样做   这是开发人员特有的   环境?

对于App | Web.config,这是我们的工作:

  1. 将web.config添加到svn:ignore
  2. 将web.config复制到web.default.config
  3. 将web.default.config添加到svn
  4. 将以下内容添加到您的BeforeBuild目标
  5.   

    <Target Name="BeforeBuild">
       <CallTarget Targets="SetupWebConfig" />
    </Target>
    <Target Name="SetupWebConfig" Condition="!Exists('Web.config')">
        <Copy SourceFiles="Web.default.config" DestinationFiles="Web.config" />
    </Target>
    

    FWIW,我们还有一个在SetupWebConfig之前调用的目标,如果构建服务器正在编译项目,它会删除web.config,这允许包含对web.default.config的更改。

    您可以使用Web.default.config中的令牌和一些正则表达式来获得想象并自动替换Web.config中的内容。这也可以捆绑到SetupWebConfig目标中。如果你想看一个例子,请告诉我。我们这样做是为了在我们的CI /构建服务器上设置连接字符串和类似的东西。

      

    我的测试项目依赖于NUnit,   Moq,以及其他图书馆。如果   这些库的位置不同   在开发系统中这会打破   参考?如果是的话,我该怎么办?   缓解这个问题?

    我的建议是将这些库包含在你的subversion / git存储库中,将它们放在一个公共区域,而不是你的项目,这样你就可以重用它们。使用相对svn:externals引用它们(记得将外部设置为特定的修订版号)。这解决了您的问题,并允许您对要使用的每个工具的版本进行细粒度控制,这有利于在分支机构上测试和维护已发布的产品。

答案 1 :(得分:1)

对于库,我通常会创建一个“库”项目,其中放置了所有DLL,并且引用了这些副本。

对于DB字符串,在每台PC上创建一个本地系统别名,并将别名放入配置文件中。

答案 2 :(得分:1)

请参阅this,了解或多或少无处不在(对于leas的OSS项目)目录结构。

对于连接字符串,您可以在hosts文件中添加一个条目,以便将db-server映射到127.0.0.1

答案 3 :(得分:0)

我使用DropBox来跨系统进行synq。如果您在开发期间只使用SQL Express数据库,则可以稍后导出。连接字符串只是指向本地系统,应该可以在任何地方工作(只要您安装了相同的SQL Express版本)。 DropBox允许您使用相同的解决方案文件和项目文件,您更改的任何内容都将反映在安装了DropBox的所有系统上。

答案 4 :(得分:0)

我总是为二进制库(https://svn.myserver.com/lib)维护一个存储库,并将所有共享二进制文件放在那里。然后我使用svn:external从中央存储中获取正确的库。然而,有两个陷阱:

  1. 这仅适用于您不从GAC引用VS中的库,而是使用“浏览”选项卡,并在处理svn:external属性时从subversion创建的本地目录中选择库。

  2. 在分支时,您需要通过使用“-r”参数在目标和源之间放置特定修订来“冻结”svn:externals属性:

    / lib / 3rd-party-lib -r4711 https://svn.myserver.com/lib/3rd-party-lib

  3. 通过这种方式,每台机器都可以进行结账,只需按下播放即可开始。有时我甚至用它来共享构建所需的小工具(批量设置权限,注册证书等等)。