Jint: 未能添加对 System.Diagnostics.Contracts 的引用

创建于 2016-10-25  ·  25评论  ·  资料来源: sebastienros/jint

当我尝试将 .NET 4.5 项目更新到 jint 2.10.2 时,NuGet 失败并出现以下错误。

未能添加参考。 包“jint”试图添加对 GAC 中未找到的“System.Diagnostics.Contracts”的框架引用。 这可能是包中的错误。 请联系包所有者寻求帮助。

最有用的评论

我在 Visual Studio 2015 Update 3、.NET Framework 4.5.1 中遇到了同样的问题。 尝试从头开始安装 jint v2.10.3。

解决问题的步骤:

  • 正如@dalenewman所写,我添加了程序集参考C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5.2\Facades\System.Diagnostics.Contracts.dll
  • 使用 nuget 包管理器安装jint ,现在它可以工作了!
  • 我从项目中删除了程序集引用System.Diagnostics.Contracts.dll
  • 利润

所有25条评论

你好,约翰!

不要更新软件包,而是尝试卸载旧版本的软件包,然后安装新版本。 在后续更新中,不应出现此错误。

你好,
我尝试卸载软件包然后安装新版本,但仍然出现此错误。

在 net461 上全新安装时也遇到此问题。

您能否提供一些重现步骤,您正在创建的项目类型,您如何选择 nuget 包。

我在.net 4.6.1 上全新安装时也遇到了这个问题。 环境:

  • Windows 10 企业版
  • Visual Studio 2015,版本 14.0.25431.01 更新 3
  • 尝试在测试项目(它引用和测试 ASP.NET MVC5 项目)上安装 jint 包。 测试项目的目标是 .net 4.6.1。

本来我用的是jint 2.10.0版本,升级导致了这个问题。 不幸的是,卸载 jint 并尝试全新安装也没有解决问题。 在这两种情况下,我都尝试了包管理器控制台以及 VS 中的 GUI 版本。 这是包管理器控制台的错误转储:

Executing nuget actions took 3.54 sec
update-package : Failed to add reference. The package 'jint' tried to add a framework reference to 'System.Diagnostics.Contracts' which was not found in the GAC. This is possibly a 
bug in the package. Please contact the package owners for assistance.
At line:1 char:1
+ update-package jint
+ ~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [Update-Package], Exception
    + FullyQualifiedErrorId : NuGetCmdletUnhandledException,NuGet.PackageManagement.PowerShellCmdlets.UpdatePackageCommand

我不完全确定,但这可能与最近的变化有关:

https://github.com/sebastienros/jint/commit/9371178b311d63f2ee2479a69d7d6663565d6173

此更改涉及将 System.Diagnostics.Contracts 依赖项从“dependencies”移动到“frameworkAssemblies”。

除非我弄错了,否则“frameworkAssemblies”指的是 GAC 中的程序集。 因此,即使我们安装并更新了 System.Diagnostics.Contracts nuget 包,它也不会查找它,而是尝试在 GAC 中找到它(但它不存在)。 这听起来合理吗?

@samcic原因在这里解释 - https://github.com/sebastienros/jint/pull/340

如果这是在使用旧版本的 NuGet 或当前版本之间进行选择,我认为选择新版本更有意义。

@marek-benes @samcic尝试以下步骤:

  1. 卸载 Jint 包
  2. 卸载 System.Diagnostics.Contracts 包
  3. 关闭“NuGet 包管理器”窗口
  4. 文件 > 全部保存
  5. 安装 Jint 包

@appel1不是NuGet新旧版本的选择,而是本次更新发布2.10.0 | 2.10.1 -> 2.10.2。

感谢您的帮助@Taritsyn 。 不幸的是,这些步骤没有成功(同样的错误)。 我还确保删除了所有本地文件(在解决方案“packages”文件夹中),以确保没有旧的 2.10.0 安装的痕迹。 我保存了所有内容,构建了所有内容(由于缺少 jint 内容,构建失败,但这很好),然后以管理员身份重新启动 VS。 然后我尝试将 jint fresh 安装为新包(不是更新)。 同样的错误。

如果我运行“gacutil -l”,那么它显示 System.Diagnostics.Contracts 确实安装在 GAC 中,因此错误消息相当混乱。

在 nuget 参考页面nuget 参考页面上,它提到“frameworkAssemblies”中的元素应该是“完全限定的程序集名称”。 也许应该包括文化、publickeytoken 和处理器架构? 只是一个想法。

有趣的是,如果我在 VS 中创建一个新的(基本的)控制台应用程序并安装 jint,它就可以工作。 我可能会尝试使用像我一样的 MVC 项目 + 测试项目的新解决方案,以希望尝试隔离问题。

@samcic看来,这是 NuGet 包管理器中的错误。 因为这些错误仅发生在 Visual Studio 2015 中的.cproj项目中(在.xproj项目中不会发生此类错误)。

@Taritsyn我假设您的意思是.csproj而不是.cproj ? 如果是这样,我在 VS 2015 中针对 .net 4.6.1 创建了一个简单的 .csproj 控制台应用程序,并且不会发生错误。 我还创建了一个简单的 .xproj 控制台应用程序,并且 jint 也可以在那里安装。

此外,我用单元测试项目创建了一个简单的 asp.net 框架 web 应用程序(mvc,.net 框架 4.6.1,不是 .net 核心)项目。 我先安装了jsint 2.10.0,然后升级到2.10.2,效果很好。

我唯一一次看到错误是在我的“大/真实”解决方案中,它再次涉及一个带有 .csproj 单元测试项目的 asp.net 框架 Web 应用程序(mvc、.net 框架 4.6.1,而不是 .net 核心)。 无论我是更新 jint 还是重新安装它,此解决方案都会出现错误。 在这个解决方案中,我经常安装和更新其他 NuGet 包,我没有看到任何其他包出现这种错误。

鉴于这一切,我不相信这是 NuGet 的错误。 我想第一步是为这个错误找到一些每个人都可以同意的重现步骤。 到目前为止,我无法找到基于设置新 VS 项目的重现步骤。

@samcic .csproj - 我打错了。

在这个解决方案中,我经常安装和更新其他 NuGet 包,我没有看到任何其他包出现这种错误。

很可能,所有这些包都是使用 $ .nuspec文件中的NuGet.exe创建的。 Jint 包是使用dotnet.exe project.json文件中的 dotnet.exe 创建的。

如果您认为 Nuget 中存在错误,请给我一个完整的问题重现,或者告诉我只使用@samcic所说的内容。 我可以直接与他们和其他一些专家交谈,以分析它的来源。

@sebastienros好的

对于包含许多项目的旧解决方案,我遇到了同样的问题。

将软件包安装到新解决方案中时我没有遇到问题。

在新的解决方案中,Nuget 添加了对以下内容的引用:

_C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework.NETFramework\v4.5.2\Facades\System.Diagnostics.Contracts.dll_

在我较旧的解决方案中,我无法引用上面的 dll,而在它旁边没有一个小警告标志,所以我引用了这个:

_C:\Windows\Microsoft.NET\assembly\GAC_MSIL\System.Diagnostics.Contracts\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.Diagnostics.Contracts.dll_

软件包安装好了,一切_appears_都可以,但显然感觉不对:-)

我无法理解它,但我认为在这个线程中添加更多细节可能会有所帮助。

@dalenewman正如您所描述的那样,从 GAC 文件夹中引用程序集也对我有用。 感谢您的信息。 在我的情况下,jint 仅用于测试项目(没有生产代码),所以我认为这足以解决我的问题。

另一个注意事项:成功安装 jint 包后,我能够从项目中删除“感觉不对”的 GAC System.Diagnostics.Contracts 引用,一切都很好。 因此,似乎只需要参考就可以进行升级。 都有点奇怪。

也刚遇到这个问题。

同样在这里。 试图更新AngleSharp.Scripting 。 我知道这不仅仅是 MWE,但问题似乎与现有/更大的回购有关,并且不会出现在新项目中。

也有这个问题。 为了确认,该问题仅发生在2.10.2上。 2.10.1安装得很好。

定位.NET 4.6.1

这里同样的问题:

未能添加参考。 包“jint”试图添加对 GAC 中未找到的“System.Diagnostics.Contracts”的框架引用。 这可能是包中的错误。 请联系包所有者寻求帮助。

细节 :

  • 尝试从2.10.1更新到2.10.2
  • Visual Studio 2015 企业版 2015 更新 3。
  • 目标框架:4.5.2

我在 Visual Studio 2015 Update 3、.NET Framework 4.5.1 中遇到了同样的问题。 尝试从头开始安装 jint v2.10.3。

解决问题的步骤:

  • 正如@dalenewman所写,我添加了程序集参考C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5.2\Facades\System.Diagnostics.Contracts.dll
  • 使用 nuget 包管理器安装jint ,现在它可以工作了!
  • 我从项目中删除了程序集引用System.Diagnostics.Contracts.dll
  • 利润

关闭,因为有一个解决方法,3.x 不应该受此影响,这就是开发工作的所在。

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

karoberts picture karoberts  ·  3评论

smadurange picture smadurange  ·  3评论

Jugolo picture Jugolo  ·  13评论

ciel picture ciel  ·  13评论

hnafar picture hnafar  ·  3评论