2011-03-22 43 views
3

我想编译一个类(sqlAccess),声明为公共数据库中的数据库连接相关的几个方法。我收到以下错误...在C编译库时出错#

Error 1 Friend access was granted to 'SqlAccess, PublicKey=00c8', but the  output assembly is named 'SQLAccess, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'. Try adding a reference to 'SqlAccess, PublicKey=00c8' or changing the output assembly name to match. c:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.Data.dll SQLAccess 

可能是什么原因?有没有一个这个名字的方法?我是编程新手,所以无法清楚地理解这一点。谢谢。

回答

0

我改变了程序集名称为sqlAccessXYZ,现在它的工作,问题是与名称。不知道到底是什么问题,目前问题已解决。谢谢。

2

如果你给组件/项目一个不唯一的名字,.NET似乎会变得脾气暴躁。在你的情况下,SqlAccess必须已经存在于.NET或引用程序集中。

解决方法是重命名您的程序集。

类似的问题: Weird error in C#

6

这为我工作: 打开属性|签名选项卡。确保您已选中“签署大会”并引用强名称密钥文件。保存并编译项目/解决方案。 (引自MSDN)

+0

这对我所做的工作。如果可能的话,你应该提供MSDN链接。 – Krumia 2016-02-05 04:31:34

+0

这对我来说非常合适。 感谢您的回答。 – 2016-10-19 11:55:07

+0

为我工作,谢谢! – gTiancai 2017-06-01 04:32:45

1

这是因为SqlAccess程序集有一个引用,它允许内部访问SqlAccess。它必须是这样的[你会发现它的AssemblyInfo.cs]:

[assembly: InternalsVisibleTo("Name of assembly goes here, PublicKey=")] 

在编译时,当编译器不能找到具体的公钥组件,您将收到错误,如“朋友访问已授予......“。 为了解决此问题,一种解决方案是从源程序集中删除上述属性,或添加新的公钥并在源程序集中更改它。

1

此原因应该是您的解决方案中重新安装/更新该特定dll,但是旧的dll没有从您的解决方案和系统中正确删除。 这就是为什么,当你改变大会名称(从sqlAccesssqlAccessXYZ)它得到了工作