Visual Studio 2013错误:IntelliSense未列出朋友程序集的内部类型

时间:2014-01-01 11:07:17

标签: c# visual-studio-2013 .net-assembly internal

问题定义:我有一个名为IRI.Ket.ShapefileFormat的类库项目,其中包含一些internal类和结构。我将另一个项目作为friend assembly介绍给了这个类库。然后我就能够构建我的解决方案并成功运行程序。但是在编码时, intellisence剂量无法识别那些内部类型和方法。如果我手动编写它们,它们就不会按预期着色。

我正在开发Visual Studio 2013 Ultimate版。

enter image description here

编辑:在上面的图片中为什么Shapefile(这是在类库中定义的内部类类型,我在朋友程序集中使用它)没有着色像DataColumn?这是一个错误吗?

更奇怪的问题:每次成功构建解决方案但过了一段时间后,错误列表中会出现一些错误,例如由于其保护级别,Shapefile.Read无法访问!这是一个快照(所有这些方法都是内部的)。奇怪的是我不知道有错误的项目可能会成功构建:)

enter image description here

2 个答案:

答案 0 :(得分:2)

我终于发现了什么问题。我有很多具有相同公钥的类库项目。这些库应该作为朋友组件引入。

[assembly: InternalsVisibleTo("Friend1, PublicKey=00240000048000009...")]
[assembly: InternalsVisibleTo("Friend2, PublicKey=00240000048000009...")]
[assembly: InternalsVisibleTo("Friend3, PublicKey=00240000048000009...")]
[assembly: InternalsVisibleTo("Friend4, PublicKey=00240000048000009...")]

所以我认为每次重复公钥都是一种硬编码,我在某处创建一个const string变量并在属性声明中使用它。但是在编译时,编译器能够访问它并成功构建项目,但在设计时却不知道如何解决它。

//somewhere
const string key = "PublicKey=00240000048000009...";
//

然后我改变了这样的界限:

[assembly: InternalsVisibleTo("Friend1, " + key)]
[assembly: InternalsVisibleTo("Friend2, " + key)]
[assembly: InternalsVisibleTo("Friend3, " + key)]
[assembly: InternalsVisibleTo("Friend4, " + key)]

所以我更改了这些行并使用了硬编码版本,现在智能感知和语法着色正常工作。

答案 1 :(得分:-2)

如果您有权访问 IRI.Ket.ShapefileFormat 的构建,请找到assembly.cs文件并添加以下内容:

  

[assembly:InternalsVisibleTo(“这里的装配名称”)]

将正在评估Shapefile类的项目名称放在上面的字符串引号之间。 然后您的项目可以访问 IRI.Ket.ShapefileFormat 的内部类型。