在我继续之前,我确实经历过这个 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程序集,如果那是我的例子没有突出的东西。
答案 0 :(得分:4)
原来工作流程定义导致了这种差异。仍试图找出原因虽然.....
好吧,如果有人能提供一些解释为什么会得到+1的东西。
答案 1 :(得分:2)
1)如果InternalsVisibleTo设置正确,你不需要反射来从'朋友'实例化它们,它可以直接使用ctor等。我会选择这条路线,以便VS IDE能够更快地反馈内部对目标项目是否真正可见。
2)根据您稍后收到的错误消息,您是否尝试过InternalsVisibleTo(“Stuff.Test.Support”)?