为什么 roslyn 对未签名的引用给出警告 CS8002 而不是错误 CS1577?
Why does roslyn give warning CS8002 instead of error CS1577 for unsigned references?
我正在为我工作的公司在 VS2015 中做一个小项目,作为公司政策,我们生产的所有程序集都必须签名。
当我向包含未签名程序集的 nuget 包添加依赖项时,我发现了一些奇怪的行为。使用 vs2015 构建项目时,我收到警告:
CSC : warning CS8002: Referenced assembly 'XXX, Version=A.B.C.D, Culture=neutral, PublicKeyToken=null' does not have a strong name.
我第一次看到它时觉得很奇怪,因为我记得它不是在 VS2013 或更早版本中编译的。事实上,在 vs2013 中构建相同的项目时出现以下错误:
CSC : error CS1577: Assembly generation failed -- Referenced assembly 'XXX' does not have a strong name.
我想也许运行时发生了一些变化,现在支持了。我大错特错了。当 运行 我的代码在 VS2015 中构建时出现警告,我现在收到运行时错误。我得到的确切异常是带有消息
的 FileLoadException
Could not load file or assembly 'XXX, Version=A.B.C.D, Culture=neutral, PublicKeyToken=null' or one of its dependencies. A strongly-named assembly is required. (Exception from HRESULT: 0x80131044)
我知道有一些 nuget 包在构建之前签署任何未签名的依赖项(比如 this one, or this other, or this last one)。
我的问题是:有没有什么方法可以从已签名的程序集引用未签名的程序集,但我遗漏了什么?如果不是,那为什么现在这是一个编译器警告,如果它稍后会给出运行时错误?
提前致谢
在某些平台(如 CoreCLR)上,从签名中引用未签名的程序集是可以的。编译器不知道您要 运行 哪个平台,因此它不再报告错误。我们仍然会报告警告,因为您可能 运行 遇到问题,就像您在桌面 CLR 上所做的那样。
我正在为我工作的公司在 VS2015 中做一个小项目,作为公司政策,我们生产的所有程序集都必须签名。
当我向包含未签名程序集的 nuget 包添加依赖项时,我发现了一些奇怪的行为。使用 vs2015 构建项目时,我收到警告:
CSC : warning CS8002: Referenced assembly 'XXX, Version=A.B.C.D, Culture=neutral, PublicKeyToken=null' does not have a strong name.
我第一次看到它时觉得很奇怪,因为我记得它不是在 VS2013 或更早版本中编译的。事实上,在 vs2013 中构建相同的项目时出现以下错误:
CSC : error CS1577: Assembly generation failed -- Referenced assembly 'XXX' does not have a strong name.
我想也许运行时发生了一些变化,现在支持了。我大错特错了。当 运行 我的代码在 VS2015 中构建时出现警告,我现在收到运行时错误。我得到的确切异常是带有消息
的FileLoadException
Could not load file or assembly 'XXX, Version=A.B.C.D, Culture=neutral, PublicKeyToken=null' or one of its dependencies. A strongly-named assembly is required. (Exception from HRESULT: 0x80131044)
我知道有一些 nuget 包在构建之前签署任何未签名的依赖项(比如 this one, or this other, or this last one)。
我的问题是:有没有什么方法可以从已签名的程序集引用未签名的程序集,但我遗漏了什么?如果不是,那为什么现在这是一个编译器警告,如果它稍后会给出运行时错误?
提前致谢
在某些平台(如 CoreCLR)上,从签名中引用未签名的程序集是可以的。编译器不知道您要 运行 哪个平台,因此它不再报告错误。我们仍然会报告警告,因为您可能 运行 遇到问题,就像您在桌面 CLR 上所做的那样。