问题标签 [internalsvisibleto]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
4812 浏览

unit-testing - 当构建过程使用强名称签署程序集时让 InternalsVisibleTo 工作?

在我们的商店中,我们使用 Cruise Control 和 MSBuild 来自动化产品的构建,作为持续集成的一部分。

构建的一部分是对程序集进行签名,以便它们具有强名称。

在我们本地开发的项目文件中,它没有指定签名,因为它被 MSBuild 脚本覆盖。

这一切都很好,直到我决定要引入需要我使用该InternalsVisibleTo属性的单元测试。我还开始使用一个不错的开源库,其中包含也使用这种技术的单元测试。

这意味着,在我的机器上,我可以更新AssemblyInfo.cs以使用以下语句:

一切都很好。

但是,检查这个会破坏构建,因为构建机器对程序集进行签名,该行需要更新为如下所示:

我有一半的想法是不签署集会并收工。但是,“签署程序集是最佳实践”(重复此咒语 3 次),如果我们从中获得任何好处,我不想远程处理它。

我们不安装到 GAC,我们并不特别担心篡改,不必担心使用我们库的第三方,我们在更新应用程序时会立即更新所有文件。最明显的好处是支持人员无法将程序集的某些随机版本复制到运行时文件夹中,并且让事情看起来可以工作一段时间。

我不想打开涉及手动更改大约 100 个项目文件以启用签名的作品。我也不想通过将应该是内部的东西标记为公共来破坏东西,我不想进入绑定重定向并且我不想删除单元测试。

我希望没有强名称的所有便利以及拥有强名称的所有好处(如果有的话),我不想为此做很多额外的工作。那是过分的要求?

这篇文章很好地描述了问题和解决方案,但我不是一个 MSBuild 脚本专家来利用它:

http://social.msdn.microsoft.com/forums/en-US/msbuild/thread/02df643c-956a-48bd-ac01-4a1016d91032/

这个问题的正确解决方案是什么?

欢迎任何意见和讨论点。

0 投票
3 回答
7222 浏览

c# - 无法使用 Rhino Mocks 为内部类型创建 Mock 类

我使用 Rhino Mocks 作为单元测试的模拟框架。

我有一个名为 Subject 的课程,这是我要测试的课程。它依赖于 IStore。

IStore 定义如下:

Subject 类定义如下:

我使用 RhinoMocks 的测试类如下:

在我的设置中,接口被定义为内部接口,它为 Subject 类和 StoreTests 类设置了 InternalsVisible。但是,当测试用例执行时,它会在 var mockStore = MockRepository.GenerateMock(); 处引发异常。说 IStore 不是公开的,因此它无法生成 Mock。

我认为这是因为 IStore 不是公开的。但是,由于我在 IStore dll 上设置了 InternalsVisibleTo,StoreTests 为该类创建一个模拟还不够吗?

现在我觉得这个问题可以通过公开 IStore 接口来解决。但是,鉴于这不是我的选择,还有其他方法可以为 IStore 创建模拟吗?

0 投票
1 回答
1008 浏览

c# - C# - InternalsVisibleTo 属性的安全问题

将 InternalsVisibleTo 属性与强命名程序集一起使用是否存在任何安全问题?我了解以这种方式接收信息的程序集必须具有解密消息的私钥,并且在 InternalsVisibleTo 属性中,您以明文形式指定公钥。有人可以更改 InternalsVisibleTo 属性中的程序集 dll 和公钥,以将内部函数共享给最初不打算共享的程序集吗?

0 投票
1 回答
16661 浏览

c# - How can I make InternalsVisibleTo attribute work by signing a public token key safely?

I am trying to expose some internals to my unit test project by using:

But I am getting the error:

Error 1 Friend assembly reference MyTest' is invalid. Strong-name signed assemblies must specify a public key in their InternalsVisibleTo declarations. .../MyClass.cs...

When I assign a PublicTokenKey manually:

The solution builds without any error.

  1. Why do I need to include a public key token?
  2. I am not sure if I will break something in production by including the public key token.

So, what is the best and safest way to assign an public key to my Test project?

0 投票
3 回答
1232 浏览

c# - 我可以让所有使用相同密钥签名的程序集都可以看到内部结构吗?

我有一个不希望公开但仍可供其他程序集访问的功能的程序集。这可以使用 InternalsVisibleToAttribute 来完成,方法是指定将使其内部可见的每个程序集。

我想知道是否有一种方法我不必指定所有引用程序集,而只需强制执行程序集必须由同一个 snk 签名才能使内部可见的规则。

此功能是否存在,如果存在,有人可以指出我正确的方向吗?

0 投票
2 回答
1271 浏览

silverlight-4.0 - Silverlight 4 中的 moq 内部接口。“无法为不可访问的类型创建代理。”

我尝试使用 moq-silverlight 4.0.10827.0 在 Silverlight 4 中模拟内部接口。

我收到错误“无法为不可访问的类型创建代理”。在 Castle.DynamicProxy.Generators.GeneratorException 中。

我在测试程序集的 assemblyInfo 中有 [assembly: InternalsVisibleTo("DynamicProxyGenAssembly2")]。我没有任何签名的程序集。

0 投票
1 回答
5861 浏览

c# - InternalsVisibleTo 不适用于所有程序集。有些有效,有些无效

我有一个 Common DLL,它有一些内部使用的内部方法。除了我还有 3 个其他项目 WebServices、UnitTests 和 PATs

在 Common 项目的 AssemblyInfo.cs 中,我添加了以下几行:

这些内部方法与 UnitTests 和 PATs 但 WebService 完美配合。当我在 WebService 项目中编写代码时,我可以在 IntelliSense 框中看到这些内部方法,这很奇怪。编写代码时没有错误警报,但是在构建项目时,我收到了此错误消息

“Common”不包含“内部方法名称”的定义

当时,我认为程序集名称在某种程度上是错误的。我试图确定它确实是错误的:

然后在 WebService 项目中,在 I use Common internal methods without compile with this message 的那一行立即变为红色:

无法在此处访问内部方法“内部方法名称

所以我认为我的程序集名称是正确的,但我仍然不知道为什么我不能在我的 WebServices 项目中使用内部方法。

0 投票
1 回答
4519 浏览

c# - 可以在 C# 中使用没有强命名程序集的 InternalVisibleTo 吗?

我在 MSDN 上找不到任何关于此的明确声明,有一些带有强名称的例子,其他的没有,对我来说,它似乎即使没有也应该工作,但它不起作用。

谢谢

0 投票
1 回答
2074 浏览

c# - InternalsVisibleTo,签名和单元测试,如何使其实用?

在“C# in Depth 2nd Edition”中,Jon Skeet 的书——我刚读到第 2 部分结束——在 7.7.3 中提到它InternalsVisibleTo也可以与签名程序集一起使用。目前我根本没有使用签名。已发布二进制文件的安全问题实际上非常关键,因此我计划使用预处理器变量测试完全删除发布程序集的属性。

只是为了兴趣,使用签名的程序集和InternalsVisibleTo? 为了InternalsVisibleTo用于指定签名的朋友程序集,我需要指定它的公钥。我只有在编译了依赖于被测程序集的朋友程序集之后才拥有它(动态程序集加载和反射抛开,什么会膨胀编码和可读性)。这听起来像是一个鸡蛋问题,需要测试程序集的引导程序。我可以想象一些使用 MSBuild 和脚本来自动执行此操作的技巧。有没有更实用的方法来做到这一点?

如果它仍然如此乏味,我将坚持我的第一个想法,即为发布版本放弃单元测试(这有点令人不满意,因为可能会未经测试微妙的时间问题......)

0 投票
3 回答
272 浏览

c# - 如何拥有“公众公众”与“内部公众”?

可能重复:
何时应使用 [assembly: InternalsVisibleTo()]?
访问 dll 方法

我有两个程序集,A.dll 和 B.dll。A.dll 有一些共同的特点,B.dll 使用它。我最终必须为其他用户分发 A.dll 和 B.dll。

但是,我将 A.dll 中的一些方法标记为公共(供 B.dll 使用),但我不希望其他人使用它们。

有没有好的方法来实现这一目标?是使用InternalsVisibleToAttribute一个好的做法来实现这一点吗?