在运行TFS时,使用EF6实体安装NuGet包会导致写入错误

时间:2017-07-15 16:36:27

标签: c# visual-studio-2015 nuget

我遇到了一个超级烦人的场景,我希望其他人之前已经经历过这种情况,并且可能有一个解决方案或更好的流程来避免这种情况。

我有一个使用EF6的自定义Nuget包,显然有实体相关文件。安装后,它会将这些实体从项目的根目录加载到“实体”文件夹中。

我也在使用TFS,这给我带来了麻烦。

当我去升级软件包时,它首先尝试通过删除现有的Entities文件夹来清除所有内容,以便我可以从新版本的NuGet poackage重新加载新实体。这会导致文件夹进入TFS的签出状态。当NuGet尝试加载新实体时,它会抱怨:

  尝试对1个项目执行添加操作时遇到

1错误。项目$ / *******无法更改。此项目的父项具有待定删除,必须先进行检查。

这太烦人了。基本上我必须遵循这个过程,以避免它首先删除包安装的所有实体文件,检查删除并在包上运行更新,然后重新加载所有实体文件。

有没有人有更好的解决方案来处理源代码控制下的Nugets?

TIA

1 个答案:

答案 0 :(得分:0)

  

有没有人有更好的解决方案来处理这样的Nugets   在源头控制下?

这是与TFS相关的已知问题,但没有最终解决方案。您可以参考Issue 4037了解详细信息。

  

我认为TFS客户端逻辑是个问题。它应该被更改,以便任何子项添加或编辑挂起的父删除导致父删除被撤消但该父项的所有其他子项切换到单独删除(即从全局父删除更改为通配符子删除除外文件夹删除后修改的文件)。

在尝试了许多不同的方法之后,我找到了解决问题的方法:

将所有Dll打包在一个单独的NuGet包中,没有任何内容。将任何其他文件打包到单独的包中。标记两个软件包,以便用户可以轻松地找到彼此相关的软件包。

您还可以在Dll包中创建一个依赖于Content包的依赖项(如果您愿意),这样安装Dll包就会自动触发安装内容包。