从 packages.config 迁移到 PackageReferences 导致无法加载文件或程序集“...”或其依赖项之一。访问被拒绝
Posted
技术标签:
【中文标题】从 packages.config 迁移到 PackageReferences 导致无法加载文件或程序集“...”或其依赖项之一。访问被拒绝【英文标题】:Migration from packages.config to PackageReferences causes Could not load file or assembly "..." or one of its dependencies. Access is denied 【发布时间】:2020-02-11 05:01:53 【问题描述】:将我们的项目升级到 PackageReferences 后,我在构建服务器(本地 AzureDevOps 代理)上遇到以下问题
"C:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Xaml.targets(193,5):
Error XC1000: XC1020: Build error occurred in the XAML MSBuild task:
'Could not load file or assembly 'file:///C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.7.2\Facades\System.Threading.ThreadPool.dll'
or one of its dependencies. Access is denied.'"
这对于不同的 Dll 随机发生(50% 的时间)。这些 dll 位于不同的目录中:Nuget 恢复目录、参考程序集或任何其他代码 dll。
在服务器上,我们使用的是 VS 2017。
当我将项目迁移到 PackageReferences 时,事情就开始发生了。在此之前,我们从未遇到过拒绝访问的任何问题。这是完全相同的代码库,具有相同的构建基础架构。
我想做什么:
我试图检查进程监视器,但那里没有“拒绝访问”条目。我可以看到它被正确读取了 为了安全起见,我在本地机器上安装了代理,看看是否不是构建机器的问题,那里也确实发生过 当我们使用 MSBuild 或 Visual Studio 在本地构建时不会发生这种情况任何想法将不胜感激。 至少要指出解决方案的方向。
[更新]
实际上,我们有整整 3 天的时间没有在服务器上发生问题,现在它又回来了。
我们还“设法”在使用 msbuild(PS 脚本)在本地构建时获得了一次。从该本地构建和下一个构建的外观(通过一个之后立即触发),我们设法看到 nuget 正在下载在上一个(失败)构建中成功下载的包。我们没有观察到连续传递构建的行为。除非清理,否则 Nuget 不会每次都下载新包。
[更新2] Nuget 还原步骤和构建步骤的调试日志文件。
gdrive
谢谢
中号
【问题讨论】:
你的角色怎么样?您的帐户是管理员之一吗? 是的。当我构建旧版本的源代码(没有包引用)时,它 100% 的时间都可以正常工作。此外,当在本地尝试时,它也是使用我的帐户安装的,所以也是管理员。 好的。但还是觉得这个问题很牵强。服务器中的 VS 版本是否与您使用的本地版本相同?如果不是,请确保它们相同。另外,您介意分享完成的构建管道日志吗?也许可以从中找到一些东西。 服务器和我们本地开发环境的版本都是 2017 年的。我们将尝试尽快将其更新到 vs19 只是还不能这样做。我会看到有关构建日志的信息。应该可以分享。 也请尝试右键单击C:\Program Files (x86)\Reference Assemblies 文件夹->properties-> 添加用户“Everyone”然后检查。之后为其分配完全控制权。如果我修改此文件权限,我只会重现错误消息。但不确定它是否符合你的要求 【参考方案1】:我建议在构建代理上运行Procmon。这将使您在此期间对所有文件系统和注册表活动进行全面审核。因此,在代理上启动它,在它们上进行几次构建以重现问题,然后暂停 procmon 并查看日志。按进程、文件或路径过滤以缩小您的问题。这应该可以让您对正在发生的事情有一个更清晰的答案,并且答案会自行呈现或者应该很容易从这里弄清楚。
【讨论】:
以上是关于从 packages.config 迁移到 PackageReferences 导致无法加载文件或程序集“...”或其依赖项之一。访问被拒绝的主要内容,如果未能解决你的问题,请参考以下文章
powershell 从packages.config中删除重复项
Chocolatey - 在 packages.config 中带有用户确认的可选包
powershell 将已安装的Chocolatey包导出为packages.config - 感谢Matty666