Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Entity framework 具有分支依赖性的分支项目的TFS策略_Entity Framework_Tfs_Continuous Integration - Fatal编程技术网

Entity framework 具有分支依赖性的分支项目的TFS策略

Entity framework 具有分支依赖性的分支项目的TFS策略,entity-framework,tfs,continuous-integration,Entity Framework,Tfs,Continuous Integration,我已经做了很多关于我应该如何处理我的问题的研究,但是我似乎无法掌握我想做什么。更重要的是,我需要创建一个解决方案,使我的团队的其他成员能够相对容易地遵循。我尝试过的解决方案只适用于一个开发人员,但会导致团队成员之间的混淆 我目前有一个分支结构,如下所示: 项目名称 主要 演示项目 人口结构 质量保证 演示项目 人口结构 发展 演示项目 人口结构 我想将DemoEntityFramework拉出来,并以相同的方式将其分支,Main/QA/Dev。我需要将其分支的原因是,分支之间

我已经做了很多关于我应该如何处理我的问题的研究,但是我似乎无法掌握我想做什么。更重要的是,我需要创建一个解决方案,使我的团队的其他成员能够相对容易地遵循。我尝试过的解决方案只适用于一个开发人员,但会导致团队成员之间的混淆

我目前有一个分支结构,如下所示:

  • 项目名称
    • 主要
      • 演示项目
      • 人口结构
    • 质量保证
      • 演示项目
      • 人口结构
    • 发展
      • 演示项目
      • 人口结构
我想将DemoEntityFramework拉出来,并以相同的方式将其分支,Main/QA/Dev。我需要将其分支的原因是,分支之间的数据库结构不同是很常见的。因此,当指向EntityFramework的PROD版本时,QA将无法正确构建。退出它的另一个原因是,我有其他依赖于相同框架的项目,我可以重用库,而不必在这些项目中保留实体框架的额外副本


我见过有人建议NuGet处理依赖关系。我可以这样做,但我需要一种方法,让每个分支在合并时提取各自的依赖项而不中断。

最好的解决方案是使用NuGet在您的情况下处理依赖项。您可以在一个数据库中为每个分支定义不同的包源



我之所以选择这个答案,是因为这是一种不同于正常的方法,但它似乎最适合我的情况

一旦我实现了NuGet方法,我真的很喜欢它,但是我真的不喜欢NuGet配置之间存在差异的想法。对于某些人来说,意外地在分支之间合并该文件是非常容易的,并且可以防止在整个分支上进行合并

我已经在我的项目中定义了不同的配置,以便对连接字符串等进行转换。我真希望有一种方法可以对项目引用做同样的事情。结果是。根据选择的配置,我现在可以让它指向不同的DLL路径。即使它们不在同一个层次中。现在,我只需根据配置指向相应的分支

下面是一个我在.csproj中更改的示例

<ItemGroup Condition="'$(Configuration)' != 'Dev'">
  <Reference Include="MyReference, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
    <HintPath>C:\Example\Prod\MyReference.dll</HintPath>
    <Private>True</Private>
  </Reference>
</ItemGroup>
<ItemGroup Condition="'$(Configuration)' == 'Dev'">
  <Reference Include="MyReference, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
    <HintPath>C:\Example\Dev\MyReference.dll</HintPath>
    <Private>True</Private>
  </Reference>
</ItemGroup>

C:\Example\Prod\MyReference.dll
真的
C:\Example\Dev\MyReference.dll
真的

一段时间过去了,随着时间的推移,我们的战略也随之改变。如果你愿意的话,我一直在寻找更好的编程“标准”,并且遇到了依赖注入。我一直都知道这件事,甚至在过去也遇到过。但我只是触及表面

我们的新方法就像Patrick MSFT和Nuget提到的那样有效。除此之外,现在,我已经将各个区域的每个不同EF项目组合到一个解决方案中,并在每个成功构建中部署到Nuget

然后,在我的“DemoProject”中,我使用依赖项注入(构造函数注入)将适当的EF上下文(包装在存储库中)传递给控制器/类/等等


通过这种方式,我现在可以将我的项目从需要担心EF项目中分离出来。这进一步有助于我们的源代码管理和连续部署。

那么我是否不签入NuGet配置文件?或者确保它不会被合并?如果文件被合并,那么它将再次中断引用。我将仔细查看您提供的链接,它看起来很有希望,但在快速浏览之后,我不知道如何绕过依赖关系被分支的问题。我的分支项目位于同一深度,因此我可以轻松引用同一个DLL,但无法轻松引用不同文件夹中的DLL。它们位于相同的深度,但位于不同的文件夹中:Dev/Main/qa,如果我可以设置某种类型的变量来提取分支名称的话。我可以将其插入到相对路径中,这样可以修复它。@Cory您需要签入NuGet配置文件,合并/分支时应小心。你可以参考这个类似的方法:这是目前最好的方法,不幸的是没有完美的解决方案。毕竟你也做了不少研究。此外,我们通常不分支程序集文件夹。如果我的回答对你有帮助或者给了你一个正确的方向,你能帮助社区中的其他人吗。我想先给点时间来回答其他问题。我看过那篇文章,可能不得不求助于类似的东西。谢谢你的帮助。实际上我找到了另一种方法来完成我想要的。谢谢你的建议,但我发现的方法似乎在最少的配置下工作得最好。
<ItemGroup Condition="'$(Configuration)' != 'Dev'">
  <Reference Include="MyReference, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
    <HintPath>C:\Example\Prod\MyReference.dll</HintPath>
    <Private>True</Private>
  </Reference>
</ItemGroup>
<ItemGroup Condition="'$(Configuration)' == 'Dev'">
  <Reference Include="MyReference, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
    <HintPath>C:\Example\Dev\MyReference.dll</HintPath>
    <Private>True</Private>
  </Reference>
</ItemGroup>