为什么roslyn会为无符号引用发出警告CS8002而不是错误CS1577?

时间:2015-11-17 14:55:35

标签: c# roslyn

我正在VS2015为我工作的公司开展一个小项目,作为公司政策,我们生产的所有组件都必须签名。

当我向包含无符号程序集的nuget包添加依赖项时,我发现了一些奇怪的行为。使用构建项目时,我收到警告:

  

CSC:警告CS8002:引用程序集' XXX,版本= A.B.C.D,Culture = neutral,PublicKeyToken = null'没有一个强大的名字。

当我第一次看到它时,这似乎很奇怪,因为我记得它在VS2013或更早版本中没有编译。事实上,在中构建相同项目时出现以下错误:

  

CSC:错误CS1577:程序集生成失败 - 引用程序集' XXX'没有一个强大的名字。

我认为可能在运行时发生了变化,现在支持了。我不能再错了。运行我在VS2015中使用警告构建的代码时,我现在遇到运行时错误。我得到的确切例外是带有消息的holy@my-VirtualBox:/var/www/example$ git branch -av * master 6b49b28 Theme Update remotes/origin/BL_CustomGrid 8827318 upgraded to BL_CustomGrid holy@my-VirtualBox:/var/www/example$ git push origin --delete BL_CustomGrid To staging-box:/var/git/example.git - [deleted] BL_CustomGrid holy@my-VirtualBox:/var/www/example$ git branch -av * master 1f3bb6c Theme Update remotes/origin/HEAD -> origin/master remotes/origin/master 1f3bb6c Theme Update holy@my-VirtualBox:/var/www/example$ ssh staging-box Welcome to Ubuntu 14.04.2 LTS (GNU/Linux 3.13.0-48-generic x86_64) * Documentation: https://help.ubuntu.com/ [ommiting login messages] Last login: Tue Nov 17 14:12:36 2015 from 54.??.??.??? STAGING-box@ip-170-??-??-???:~$ cd /var/www/staging-example/ STAGING-box@ip-170-??-??-???:/var/www/staging-example$ git pull remote: Counting objects: 27, done. remote: Compressing objects: 100% (9/9), done. remote: Total 10 (delta 7), reused 0 (delta 0) Unpacking objects: 100% (10/10), done. From /var/git/example 6b49b28..1f3bb6c master -> origin/master Updating 6b49b28..1f3bb6c Fast-forward skin/frontend/example/default/css/custom.css | 76 +++++++++++++++++++++++++++++++++++++++++++++++----------------------------- skin/frontend/example/default/sass/_checkout.scss | 9 +++++++++ 2 files changed, 56 insertions(+), 29 deletions(-) STAGING-box@ip-170-??-??-???:/var/www/staging-example$ git branch -av * master 6b49b28 Theme Update remotes/origin/BL_CustomGrid 8827318 upgraded to BL_CustomGrid STAGING-box@ip-170-??-??-???:/var/www/staging-example$ git push origin --delete BL_CustomGrid error: unable to delete 'BL_CustomGrid': remote ref does not exist error: failed to push some refs to '/var/git/example.git' STAGING-box@ip-170-??-??-???:/var/www/staging-example$

  

无法加载文件或程序集' XXX,Version = A.B.C.D,Culture = neutral,PublicKeyToken = null'或其中一个依赖项。需要一个强名称的程序集。 (HRESULT异常:0x80131044)

我知道有一些nuget软件包会在构建之前签署任何未签名的依赖项(例如this onethis otherthis last one)。

我的问题是:有没有办法引用已签名的未签名的程序集可以工作,我错过了什么?如果没有,为什么现在这是一个编译器警告,如果它以后会发出运行时错误?

提前致谢

1 个答案:

答案 0 :(得分:3)

在某些平台(如CoreCLR)上引用签名的无符号程序集是正常的。编译器不知道您要运行哪个平台,因此它不再报告错误。我们仍会报告警告,因为您可能会遇到问题,就像在桌面CLR上一样。