7

在我继续之前,我确实通过了这个 InternalsVisibleTo 属性不起作用!

因此标题

好的,所以我有一个使用类似以下内容的项目的工作版本。

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

在 Properties/AssemblyInfo.cs 文件中包含我想要访问的内部内容。在检查它之前它正在工作。但是在 Team Foundation IDK WTF 如此合并之后是错误的,但它就像我的 AssemblyInfo.cs 没有看到该属性,但我验证文件中没有任何更改,但我仍然收到"innaccessable due to its protection level."错误。(伽马辐射?太阳黑子?那些训练错误将工作代码转换成不工作代码的邪恶小精灵哈哈)

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

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我在此问题开头显示的示例属性类似的方式设置的多个属性。如果我的示例没有突出显示,我也会使用强命名程序集。

4

2 回答 2

4

事实证明,工作流定义导致了差异。仍然试图弄清楚为什么......
好吧,如果有人可以提供一个链接来解释为什么会从我那里得到+1。

于 2010-08-18T17:04:22.003 回答
2

1) if InternalsVisibleTo is set up correctly, you shouldn't need reflection to instantiate them from the 'friend', it can just use ctor's and the like directly. I would go this route so that the VS IDE can give you faster feedback on whether the internals are really visible to the target project.

2) as per the error message you got later, have you tried InternalsVisibleTo("Stuff.Test.Support") ?

于 2010-08-17T16:32:48.030 回答