我在回答其他答案中提出的问题时犯了错误,但实际上阅读了错误消息,很明显,遇到的问题是由您认为的以外的其他原因引起的。我决定保留我的另一个答案,因为我已经看到太多次人们试图更改他们已经用于测试的包版本的内容,并且不明白为什么他们在尝试使用更新的包时看不到他们的更改。无论如何,强名称签名的程序集只能对其他强名称签名的程序集具有引用/依赖关系,这意味着您的项目仍在引用一些没有强名称签名的包(或者可能是项目引用,我不记得这是否可以发生在packages.config
项目中,不应该发生在项目中PackageReference
)。但正如错误消息所说,您的项目当前根本没有引用TSC.Business.DataContracts, Version=2.10.6.0, Culture=neutral, PublicKeyToken=null
。
一种快速确定您的项目正在使用哪个程序集没有强名称签名的方法是对项目进行强名称签名。虽然这意味着您使用的所有包都必须是强名称签名的,但如果您使用任何没有强名称签名的 3rd 方包,这将不起作用。无论如何,如果你这样做,你会得到这个错误:
MSB3188:程序集“<程序集>”必须经过强签名才能标记为先决条件。
相反,您看到的错误是“'JsonWebToken' 类型是在未引用的程序集中定义的”。这意味着您正在引用一个程序集(我假设来自一个包),该程序集具有返回类型对象的方法或属性JsonWebToken
,并且在您的代码中使用了var jwt =
. 这会导致您的项目对定义该类型的程序集具有程序集依赖项(不同于包依赖项),但定义该类型的程序集未使用/r
参数传递给编译器。除非您自己运行 csc.exe,否则这意味着您的项目无法通过项目或包引用获得引用。
原因可能是因为使用的包没有正确声明自己的 nuget 依赖项,也可能是您的项目正在使用packages.config
并且有对使用TSC.Business.DataContracts, Version=2.10.6.0, Culture=neutral, PublicKeyToken=null
. 如果您的项目正在使用PackageReference
,那么所有依赖项都是可传递的,这意味着如果您引用使用包的项目,这些包也将自动可用于您的项目。我认为packages.config
项目的情况并非如此,但我不确定是否ResolveAssemblyReferences
在运行 csc.exe 之前或之后的构建中发生。
假设这是一个包问题,而不是传递性项目引用问题,当包作者使用 nuspec 文件创建他们的包时可能会发生这种情况,因为它容易出错。这就是为什么 NuGet 团队强烈建议使用 SDK 风格的项目(它们可以针对 .NET Framework,它们不限于 .NET Core 和 .NET Standard)并且dotnet pack
在没有 nuspec 的情况下使用来自动打包所有内容。NuGet 依赖项是自动添加的,因此根本不会发生这种类型的包创作错误。如果您使用 nuspec 打包您的包,请考虑切换到 SDK 样式的项目并停止使用 nuspec,否则请仔细检查您的包以确保它们具有正确的依赖项(nuget.exe pack
可以自动为包和项目引用添加 NuGet 依赖项,但这会更容易出错易于)。
也许我应该在这里停止我的信息,但是还有另一种可能性较小的可能性。我希望简单地解释它不会混淆更多的帮助。既然您说在开始强名称签名时确实增加了包版本号,我希望这意味着您也增加了程序集版本号。如果是这样,那么您应该知道版本 2.10.6.0 是否应该是强名称签名的。如果是这样,那么您在构建和打包 TSC.Business.DataContracts 或您的项目使用的依赖于 TSC.Business.DataContracts 的任何包时也会遇到问题,因为显然它使用的是未签名版本的 dll。如果版本 2.10.6.0 是预签名版本,那么您的项目使用的是针对这个旧版本的 TSC.Business.DataContracts 编译的包,