InternalsVisibleTo属性不起作用

时间:2010-08-17 15:41:22

标签: c# visual-studio-2010 reflection assemblies internalsvisibleto

在我继续之前,我确实经历过这个 InternalsVisibleTo attribute ain’t workin'!

因此标题

好的,所以我的项目工作版本使用了以下内容。

[assembly: InternalsVisibleTo("Stuff.Test.Support, PublicKey="0024000004800000940000000302000000240000525341310004000001000100d158cd56401c3d90b52ca1a5f273d608c3ce12aaa21385b0f4ad7dc1b747e45ee1f1771c104c52cb4da1b587ae38b6d36fa1d8e8f14003c42f700bc62ef2ec04b231c5d930e4bc3691aa1ef7b6713926316d4be1165ede086e94190b44edd4ad0d024230ae6eb9deb728b00d71d1d468b20a9bb78f242bd6c41e640c2e5c0cd5")]

在Properties / AssemblyInfo.cs文件中包含我想要访问的内部资料。 在检查它之前它正在工作。但是在Team Foundation IDK合并之后,WTF是错误的,但它像我的AssemblyInfo.cs看不到属性,但我确认文件中没有任何变化,但我仍然得到"innaccessable due to its protection level."错误。 (Gama辐射?太阳黑子?那些训练臭虫的小恶魔侏儒将工作代码调到不工作的代码中lol)

我尝试过使用反射添加各个实例......

Assembly Core = Assembly.LoadFile("C:\Stuff.Internal.Core\bin\Debug\Stuff.Internal.Core.dll");

Object AssmWithIdentifier = Core.CreateInstance("AssemblyWithIdentifer", false);

当我尝试这个时,我得到'Stuff.Internal.AssemblyWithIdentifer' is inaccessible due to protection level.

否则,如果我注释掉与内部内容有关的任何内容,我的项目编译得很好。

我用Red Gates Reflector双重检查了我的“PublicKey”

我也试过使用privateObjects可能以这种方式访问​​方法,但无论我如何尝试我都无法实例化内部任何东西。

我还尝试过简单地添加一个新项目,编译任何引用和是实际工作但是之后我尝试创建一个新项目并在“Stuff.Test.Support”项目中添加所有内容以包含引用和之类的,并将其添加到我希望访问的项目中的AssemblyInfo.cs中,但是,一旦我尝试编译,我得到相同的错误"innaccessable due to its protection level."

修改 我忘了提到我正在使用全局管理程序集的sharedAssembly.cs,并且以与我在本问题开头所示的示例assembly: InternalsVisibleTo属性类似的方式设置了几个属性。 我也在使用Strong Named程序集,如果那是我的例子没有突出的东西。

2 个答案:

答案 0 :(得分:4)

原来工作流程定义导致了这种差异。仍试图找出原因虽然.....
好吧,如果有人能提供一些解释为什么会得到+1的东西。

答案 1 :(得分:2)

1)如果InternalsVisibleTo设置正确,你不需要反射来从'朋友'实例化它们,它可以直接使用ctor等。我会选择这条路线,以便VS IDE能够更快地反馈内部对目标项目是否真正可见。

2)根据您稍后收到的错误消息,您是否尝试过InternalsVisibleTo(“Stuff.Test.Support”)?