【问题标题】:InternalsVisibleTo attribute isn't workingInternalsVisibleTo 属性不起作用
【发布时间】:2011-03-31 01:48:39
【问题描述】:

在我继续之前,我确实经历了这个 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." 错误。 (伽马辐射?太阳黑子?那些训练 bug 将工作代码改成不工作代码的邪恶侏儒,哈哈)

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

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 属性类似。 如果我的示例没有突出显示,我也会使用强命名程序集。

【问题讨论】:

  • 嘿,也许您应该从该项目中删除所有工作流定义!试试看。
  • 天哪,可行。也许你应该把它写下来作为答案,这样你才能真正获得一些信任。

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


【解决方案1】:

1) 如果 InternalsVisibleTo 设置正确,则不需要反射来从“朋友”实例化它们,它可以直接使用 ctor 等。我会走这条路,以便 VS IDE 可以更快地为您提供有关内部是否对目标项目真正可见的反馈。

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

【讨论】:

  • 1)我尝试使用反射作为使用 InternalsVisibleTo 的替代方法,因为它目前无法正常工作。我目前正在修改反思,看看是否有我错过的东西。 2) 我目前正在使用强名称程序集,所以我收到错误 Friend assembly reference 'Stuff.Tests.Support' is invalid。强名称签名的程序集必须在其 InternalsVisibleTo 声明中指定一个公钥。抱歉,我刚刚修改了我的问题,以透露有关我的设置的更多信息。所以也许这可以更好地帮助你。
【解决方案2】:

原来是工作流程定义造成了差异。仍然试图弄清楚为什么......
好吧,如果有人可以提供一个链接来解释为什么会从我这里得到 +1。

【讨论】:

猜你喜欢
  • 2013-09-21
  • 2013-12-16
  • 1970-01-01
  • 1970-01-01
  • 2011-04-06
  • 1970-01-01
  • 1970-01-01
  • 2015-09-05
相关资源
最近更新 更多