【问题标题】:Missing DLL files in \bin folder after downloading fully-working solution to a second machine将完全工作的解决方案下载到第二台机器后,\bin 文件夹中缺少 DLL 文件
【发布时间】:2019-12-17 10:55:08
【问题描述】:

我正在尝试从 Azure DevOps(以前称为 VisualStudio.com)下载工作分支并将其运行到第二台机器上。

主机(VS2017 Pro):

  1. SolutionABC 完美构建和运行
  2. 分支到 SolutionABC-Branch 并进行了小的更改(此问题之外)
  3. SolutionABC-Branch 完美构建并运行
  4. SolutionABC-Branch 已签入

第二台机器(VS2019 Pro):

  1. SolutionABC 完美下载、构建和运行
  2. SolutionABC-Branch 下载,但不会构建:

通过错误对话框追溯错误,我得到了:

警告 BC40056

Imports 中指定的命名空间或类型 'Microsoft.IdentityModel.Clients.ActiveDirectory' 不包含任何 公共成员或找不到。确保命名空间或类型 已定义并包含至少一个公共成员。确保 导入的元素名称不使用任何别名。

快速谷歌搜索引导我here,所以按照说明确实存在一些问题:

首先,请问我该如何解决?

其次,当从它分支出来的父解决方案在这台机器上完美运行时,这是如何发生的?

更新

似乎许多项目引用(包括解决方案中的其他项目以及 Microsoft DLL)也丢失了。无奈之下,我将 Microsoft DLL 从初始项目复制到了分支项目。这已经解决了这个问题,但我的问题仍然没有答案......

解决方案

问题原来是 VSTS/TFS 的文件/路径长度限制。将我的本地存储库重新定位到更短的目录名称(例如 C:\TFS)解决了这个问题。

【问题讨论】:

  • 在黑暗中拍摄:该程序集的使用对分支来说是新的,它添加了这个程序集,看起来像是 Azure SDK for .NET 的一部分 - 是什么机器2上没有安装哪个?可能是 2019 年安装时未选择的组件。

标签: asp.net visual-studio tfs webforms azure-devops


【解决方案1】:

将完全可用的解决方案下载到第二台机器后,\bin 文件夹中的 DLL 文件丢失

AFAIK,这个问题应该与 TFS/Azure Devops 无关,它更多地与小的更改或环境设置有关。虽然你认为它是(在当前问题之外),但它可能会导致这个问题出现在你看不到/想不到的地方。

要解决此问题,我们需要对其进行故障排除:

由于该分支的父解决方案在第二台机器(VS2019 Pro)上完美运行,我们可以创建一个新分支而无需进行微小更改,然后检查是否仍然存在此问题?

然后,添加这些更改并检查您是否再次遇到此问题。

注意:尝试从第二台机器上的 SolutionABC-Branch 解决方案中删除引用并重新添加以检查此问题是否已解决。

希望这会有所帮助。

【讨论】:

  • 我已将 VS 更新到 16.2.1。我分支了原始解决方案(没有更改),并下载到第二台机器。现在在下载过程中出现以前没有出现的错误,TF400889 The following path contains more than the allowed 259 characters(有问题的 ActiveDirectory DLL)。那么......为什么这只发生在机器 2 上?更重要的是,鉴于这些字符中的大多数是由 Microsoft 的命名约定生成的,如何克服这一点?
  • @EvilDr,你有没有试过把本地repo保存在C/D盘的根目录下?
  • 还没有。我很感激我将不得不重新映射我的文件夹映射,并将分支重命名为更短的名称。尽管如此,当 Microsoft DLL 文件名是 147 个字符时,我仍然没有太多字符可玩。除了较短的解决方案/项目/分支名称之外,是否没有解决此限制的方法? Git也会出现这个问题吗?
  • @EvilDr,很抱歉这么晚才回复,我一直卡在其他线程中。是的,这是 TFVC 限制:visualstudio.com/en-us/docs/reference/…。我们必须调整您的文件/文件夹结构才能完成这项工作。
  • 感谢您回来查看。将本地工作区文件夹重定位到短路径(例如`C:\TFS`)解决了这个问题。这是一个不幸的限制,但至少我找到了解决方案。继续努力。
【解决方案2】:

如何解决:

使用Microsoft.IdentityModel.Clients.ActiveDirectory的nuget包

是什么原因造成的:

我敢打赌,这指出了这两台机器之间的差异。查看参考属性中列出的框 1 上的目录,并检查程序集是否存在。验证它在框 2 上的相同路径中。同时检查两台机器上的 GAC。 VS/MSBuild 在查找这些程序集时会尝试尽可能智能,如果提示路径说明一件事,但在那里找不到,但程序集已注册,则构建将正常进行。

【讨论】:

  • 好吧,这很奇怪。我检查了分支解决方案上的包目录,并且 DLL 文件确实在那里,尽管 VS 中的引用框没有看到它们。似乎包文件夹作为解决方案分支的一部分正确分支。当我通过 visualstudio.com 在线浏览文件时,我还可以在两个解决方案(原始和分支)的包目录中看到它们。
  • 我认为@Leo Liu-MSFT 已经找到了上面的根本问题(路径长度限制)。但无论如何,感谢您的善意和宝贵意见。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-08
  • 1970-01-01
  • 2011-06-14
  • 1970-01-01
相关资源
最近更新 更多