我正在开展WCF服务。 WCF服务接口和实现位于不同的项目中。还有一个Windows服务项目来托管WCF服务。
WCF服务实现需要做的一件事是调用几个外部(SOAP)Web服务。我们通常构建它的方式是为SOAP服务创建一个单独的类库项目;我们将在类库中创建Web引用和工厂/帮助器方法。
上述细节可能与实际问题有关,也可能与之无关。这是我在构建WCF服务实现项目时遇到错误(其中X是SOAP服务包装程序集之一):
引用的程序集“X”没有强名称
但是WCF服务实现项目没有设置为签名(接口项目也不是)。在这一点上,引用它的唯一两件事是Windows服务项目和单元测试项目 - 这两者都没有签名。
WCF实现还引用了其他(预先存在的)Web服务包装器项目,但它只是抱怨这两个。我已经在文本编辑器中并排了一个现有的和一个新的项目文件...我可以看到任何重大的差异。
我还检查了是否有任何项目正在导入需要对其进行签名的设置,如Stack Overflow问题 Remove signing from an assembly 中所述。情况似乎并非如此。
我正在尝试使用AutoMapper - 1.1,因为我们仍在使用.NET 3.5 - 在我的WCF实现中。这是一个签名的程序集,所以我可以看到它可能在我的代码和SOAP服务包装器上出现问题。但在我看来,这将是一个运行时问题,而不是构建时间。但是因为我怀疑它可能至少是一个促成因素,我删除了AutoMapper和相关代码,但我仍然得到相同的错误。
我已经研究过这个问题,大多数搜索结果都包含有关如何签名(可能是第三方)程序集的说明。
我尝试删除并重新添加引用,重新启动Visual Studio和我的PC。
Windows 7 64位上的Visual Studio 2010 / .NET 3.5。
我确定我错过了一些相当明显的东西......我无法弄清楚是什么。
答案 0 :(得分:1)
嗯......这太尴尬了。
我怀疑,这很简单。事实上,服务接口和实现已经签署;我对此不正确。但是,这是在项目设置/文件中不,而是在AssemblyInfo.cs
文件中通过指令完成的
[assembly: AssemblyKeyFile("keyfile.snk")]
。
我不熟悉这种签名方法。我收集它自VS2005以来已被弃用 - 部分原因是通过项目属性管理签名更为直接,部分原因是将此信息放入AssemblyInfo
被视为安全风险。
事实上,我至少看过AssemblyInfo
个文件中的一个......但显然我没有向下滚动得足够远。 (我说令人尴尬。)
希望其他人可以从中受益。
答案 1 :(得分:0)
您无法从已签名的程序集引用未签名的程序集,无法构建的项目应该是与其绑定的强名称密钥的项目。
您可能在全局程序集缓存中有一个已签名的引用,而MSBuild正在拾取该引用,而不是您选择的引用。