问题标签 [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.
visual-studio-2012 - Microsoft 伪造内部类 Shim 未生成
我有 Windows 窗体应用程序(名为“ WindowsFormsApplication1 ”的程序集)和单元测试项目(名为“ UnitTestProject2 ”的程序集)。
我将 InternalsVisibleTo 属性添加到“WindowsFormsApplication1\AssemblyInfo.cs”中,例如
使用 Microsoft Fakes(VS 2012 Ultimate)将内部类从“WindowsFormsApplication1”访问到单元测试应用程序“UnitTestProject2”。
我可以使用单元测试项目中的命名空间直接访问内部类。但是我无法访问该内部类的 Fakes - Shims 和 Stubs。 我尝试了 InternalsVisibleTo 属性的不同组合:
等,但没有奏效。
任何人都知道出了什么问题以及如何解决它?
f# - 如果 F# 中的私有实体编译为内部,为什么 InternalsVisibleTo 不起作用?
所有非公共实体的 CLI 编译形式为
internal
.
在我的主要项目中,我有一个定义为的函数
在主项目的“AssemblyInfo.fs”中,我有
(我已经仔细检查了这个名字。)
但是,在测试程序集(也是 F#)中,如果myFun
我从.The value 'myFun' is not accessible from this code location.
private
myFun
奇怪的是,myFun
即使没有InternalsVisibleTo
.
当实体编译到并且我在主程序集中指定时,为什么myFun
无法从测试程序集中访问私有?private
internal
InternalsVisibleTo
c# - 为什么还要对 InternalsVisibleTo 引用的程序集进行签名?
我有一个强命名的 c# 程序集:Strong.Named.Assembly.dll。它具有InternalsVisibleTo
带有其公钥的属性,用于另一个程序集:[assembly: InternalsVisibleTo("Another.Assembly, PublicKey=xxx")]
. Anoter.Assembly
尚未签署。所以我也无法引用 中的类,Strong.Named.Assembly
直到我也唱了Another.Assembly
。
为什么不能将强命名程序集的内部显示给未签名的程序集?
c# - InternalsVisibleTo 带有“私人保护”
.Net 框架和 C# 的新版本提供了新的访问修饰符:private protected
. 为了访问这样的成员,该类必须同时
- 驻留在同一个程序集中,并且
- 从定义类派生。
(与protected internal
满足其中一个条件就足够的情况相反)
出于测试目的,InternalsVisibleTo
当我喜欢从位于不同程序集中的测试类中访问类的非公共成员时,该属性非常方便。
如何private protected
与InternalsVisibleTo
属性交互?我可以从派生自原始类的“朋友”程序集中的类中访问此类成员吗?
(我无法在我的机器上尝试,因为 Visual Studio 和 C# 的版本太旧了)。
.net - .NET Framework 和 .NET Standard / Core 框架程序集的哪个“[InternalsVisibleTo]”?
我遇到了交叉装配/朋友装配类型可见性的问题。
我有以下程序(我签名/强名称)。它告诉 Castle DynamicProxy(我使用的是Castle.Core
NuGet 包的 4.2.1 版本)为我的 interface 创建一个代理IFoo
。我还指定 myinternal class InterfaceProxyBase
应该是代理类型的基类。
DynamicProxy 然后用于System.Reflection.Emit
创建代理类型。但显然,System.Reflection.Emit.TypeBuilder
无法访问InterfaceProxyBase
.
所以,显然我需要一个[assembly: InternalsVisibleTo]
框架自己的程序集/程序集的属性。我的程序(实际上是一个类库)同时针对 .NET 4.5 和 .NET Standard 1.3。
我需要哪些[assembly: InternalsVisibleTo]
属性(包括精确的公钥)才能使我的代码适用于上述平台/目标?
PS:我知道我可以通过InterfaceProxyBase
公开并[EditorBrowsable(Never)]
为了外观而隐藏它来规避这个问题,但如果我不需要,我真的不想公开这种内部类型。
PPS:如果将内部结构公开给框架程序集是一个非常糟糕的主意,出于安全考虑,请告诉我,然后我会很高兴地重新考虑我的方法。
.net - 具有 ReflectionPermissionFlag.RestrictedMemberAccess 的动态程序集/类型
我的FlatFiles项目用于System.Reflection.Emit
在运行时生成反序列化器/序列化器以读取/写入 CVS 文件等。直到最近,我才能够简单地使用传入DynamicMethod
构造函数参数。true
restrictedSkipVisibility
我正在开发的新功能需要我在运行时构建一个类,而不是一个简单的方法。我能够使用AssemblyBuilder
/ ModuleBuilder
/ TypeBuilder
/etc 实现新逻辑。internal
但是,每当我需要访问项目类时,我都会遇到问题。为此,我将[InternalsVisibleTo]属性添加到我的Assembly.cs
文件中,从而使我的动态程序集可见。
当我查看诸如Castle.DynamicProxy.Core 之类的项目时,我发现它们也依赖于[InternalsVisibleTo]
。查看使用DynamicProxy的其他项目,我可以看到它们正在添加相同的属性。使用这些库的任何人还必须添加属性:example。即使那样,也不提供对private
类和成员的访问。
从我在线阅读的内容来看,使用动态程序集似乎根本无法跳过可见性检查。这是真的?我只是在寻找确认。
我的研究还表明,DynamicMethod
跳过可见性检查的能力仅适用于某些环境。换句话说,FlatFiles 不能在更严格的环境(例如 Internet)中工作。真的吗?这可能是迫使我的用户将[InternalsVisibleTo]
属性添加到他们未来的项目的理由。
c# - [TestMethod] 必须是公开的吗?如果不是,会有什么后果?
我正在使用 Microsoft.VisualStudio.TestPlatform.TestFramework 提供的测试工具。我有一个用 [TestMethod] 装饰的测试方法。我想使用 [DataRow] 为各种参数组合实现此测试。该方法需要的参数之一是在另一个程序集中声明为内部的枚举类型;定义枚举类型的程序集使包含单元测试的程序集通过 InternalsVisibleTo 访问其内部。
据我所知,单元测试方法通常在公共类中是公共的。当涉及到这个单元测试方法时,要么测试方法必须不能从单元测试程序集外部访问(通过将其设为私有或内部,或者通过将包含它的测试类设为内部来实现),要么必须公开枚举。将枚举公开是不合适的,因此将测试方法设置为内部似乎是正确的。
将单元测试方法设为内部是否有任何可能的负面影响?
这个问题无疑是一个简单的答案。我问它是因为我在互联网上搜索它的答案根本没有成功。我能找到的只是关于是否应该测试私有方法的讨论。
注意:如果您给出的评论或答案未能回答我的问题,而是暗示或暗示使用 InternalsVisibleTo 测试程序集的内部成员是错误的,那么我将立即拒绝您的回答。
注意 2:在这种情况下可能要做的一件事情是使用字符串参数而不是枚举参数,在测试方法中使用 Enum.Parse,并将所有相关参数作为使用 nameof 运算符构造的字符串传递。我不喜欢这样,但这可能是最不坏的解决方法。
c# - 依赖注入和 InternalsVisibleTo 属性
在我的解决方案中,我在自己的模块中有一个 IoC 容器(Ninject)。它可以很好地解决所有模块的公共类之间的依赖关系,但是它如何解决内部类的依赖关系呢?
我Customer
在 BusinessRules 项目中有一个名为 的公共类。在保存新客户之前,必须调用许多验证方法,它们都在一个名为CustomerValidator
. 这个验证器类是一个实现细节,只应在验证新客户时调用,因此其他项目不应看到它。
问题是 IoC 容器看不到CustomerValidator
(因为它是内部的),并且它无法解决这样的依赖关系:
IoC 容器只能看到公共类,而对内部类Customer
的存在一无所知。CustomerValidator
一种可能的解决方案是使用通常用于单元测试的 InternalsVisibleTo 属性,然后 IoC 将能够看到我的内部类:
这是一个可以接受的解决方案吗?在保持 CustomerValidator 内部的同时还有其他方法吗?
unit-testing - Haskell 中 .NET 的“InternalsVisibleTo”等价物
在 .NET 中,我可以使用以下属性装饰我的程序集:
因此,所有标记为“内部”的模块都可以从“MyProject.Test”访问。我可以使用它,例如对我不想在我的库中公开的功能进行单元测试。
我想知道 Haskell 的世界中是否有类似的东西。假设我有一个包含以下 .cabal 文件的库:
有没有办法从 mylib-test 测试套件中引用“MyLibrary.Utils”?