从未签名项目引用的程序集需要强名称

本文关键字:程序集 强名称 引用 项目 | 更新日期: 2023-09-27 18:24:06

我正在开发WCF服务。WCF服务接口和实现在单独的项目中。还有一个Windows服务项目来承载WCF服务。

WCF服务实现需要做的一件事是调用几个外部(SOAP)web服务。我们通常的结构方式是为SOAP服务创建一个单独的类库项目;我们将在类库中创建一个Web引用和一个工厂/助手方法。

上述细节可能与实际问题有关,也可能与实际情况无关。这就是我在构建WCF服务实现项目时遇到的错误(其中X是SOAP服务包装程序集之一):

引用的程序集"X"没有强名称

但是WCF服务实现项目没有设置为签名(接口项目也没有)。在这一点上,唯一引用它的两件事是Windows服务项目和单元测试项目——这两个项目都没有签名。

WCF实现还引用了其他(预先存在的)web服务包装器项目,但它只是抱怨这两个。我在文本编辑器中并排调出了一个现有的和一个新的项目文件。。。我看不出有什么显著的差异。

我还检查了是否有任何项目正在导入需要对其进行签名的设置,如Stack Overflow问题从程序集中删除签名中所述。事实并非如此。

我试图在我的WCF实现中使用AutoMapper——1.1,因为我们仍然使用.NET 3.5。这是一个已签名的程序集,因此我可以看到它可能在哪里出现问题,这反映在我的代码和SOAP服务包装器上。但在我看来,这将是一个运行时问题,而不是构建时问题。但因为我怀疑这至少是一个促成因素,我删除了AutoMapper和相关代码,但我仍然得到了同样的错误。

我已经研究过这个问题,大多数搜索结果都包含关于如何签名(可能是第三方)程序集的说明。

我已经尝试删除和重新添加引用,重新启动了Visual Studio和我的电脑

Windows上的Visual Studio 2010/.NET 3.5;7 64位。

我肯定我错过了一些显而易见的东西。。。我就是搞不明白是什么。

从未签名项目引用的程序集需要强名称

嗯。。。这太尴尬了。

正如我所怀疑的,这是一件简单的事情。事实上,服务接口和实现已设置为待签署;我对此是不正确的。但是,这不是在项目设置/文件中完成的,而是在AssemblyInfo.cs文件中通过指令完成的CCD_ 2。

我不熟悉这种签字方式。据我所知,自VS2005以来,它一直被弃用——部分原因是通过项目属性管理签名更简单,部分原因是将这些信息放入AssemblyInfo被认为是一种安全风险。

事实上,我至少看过一个AssemblyInfo文件。。。但显然我没有向下滚动足够远。(我说这很尴尬。)

希望其他人能从中受益。

您不能从已签名的程序集中引用未签名的程序集,未能构建的项目应该是绑定了强名称密钥的项目。

可能是MSBuild正在获取的全局程序集缓存中某个引用的签名版本,而不是您选择的引用。