问题定义:我有一个名为IRI.Ket.ShapefileFormat
的类库项目,其中包含一些internal
类和结构。我将另一个项目作为friend assembly介绍给了这个类库。然后我就能够构建我的解决方案并成功运行程序。但是在编码时, intellisence剂量无法识别那些内部类型和方法。如果我手动编写它们,它们就不会按预期着色。
我正在开发Visual Studio 2013 Ultimate版。
编辑:在上面的图片中为什么Shapefile
(这是在类库中定义的内部类类型,我在朋友程序集中使用它)没有着色像DataColumn
?这是一个错误吗?
更奇怪的问题:每次成功构建解决方案但过了一段时间后,错误列表中会出现一些错误,例如由于其保护级别,Shapefile.Read
无法访问!这是一个快照(所有这些方法都是内部的)。奇怪的是我不知道有错误的项目可能会成功构建:)
答案 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 的内部类型。