标签: internalsvisibleto

InternalsVisibleTo属性不起作用

我正在尝试使用InternalsVisibleToassembly属性使我的单元测试项目可以看到.NET类库中的内部类.出于某种原因,我不断收到一条错误消息:

由于其保护级别,"MyClassName"无法访问

两个程序集都已签名,并且我在属性声明中列出了正确的密钥.有任何想法吗?

.net attributes internalsvisibleto

70
推荐指数
8
解决办法
5万
查看次数

InternalsVisibleTo不起作用

我插入一行:

[assembly: InternalsVisibleTo("MyTests")]

在我的test(Properties/AssemblyInfo.cs)项目中,其中MyTests是Unit Test项目的名称.但由于某种原因,我仍然无法从单元测试项目中访问内部方法.

关于我做错了什么的任何想法?

c# internalsvisibleto

51
推荐指数
4
解决办法
4万
查看次数

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

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

我有一个名为Subject的类,它是我想要测试的类.它依赖于IStore.

IStore定义如下:

//internal interface : has InternalsVisible to both "Subject" 
//and "StoreTests" class namespaces
internal interface IStore {
    void Store(string name);
    //other methods
}
Run Code Online (Sandbox Code Playgroud)

Subject类定义如下:

class Subject : IStore {
    private IStore internalStore;

    //constructor injection
    void Subject(IStore store) {
        internalStore = store;
    }

    void Store(string name) {
        internalStore.Store(name);
    }

    //other methods
}
Run Code Online (Sandbox Code Playgroud)

我使用RhinoMocks的测试类如下:

//test class
class StoreTests {
    Subject subject = new Subject();

    [Test]
    public StoreTest() {
        //Arrange
        var mockStore = MockRepository.GenerateMock<IStore>();
        string testName = "test";
        mockStore.Expect(x => …
Run Code Online (Sandbox Code Playgroud)

c# unit-testing rhino-mocks internalsvisibleto internal

18
推荐指数
2
解决办法
6355
查看次数

使用"朋友" - 单元测试的声明.馊主意?

[ 当然,问题不仅限于特定的"朋友"实现,请尽可能指出相关的实施细节 ]

通过未解答的问题,我偶然发现了这个InternalsVisibleTo属性:

指定仅在当前程序集中通常可见的类型对另一个程序集可见.

MSDN上的C#编程指南有一个Friend Assemblies部分,描述了如何使用该属性允许将方法和类型用于另一个程序集.internal

我想知道使用它来创建一个"隐藏"界面来检测库以供单元测试组件使用是否是一个好主意.它似乎在两个方向上大量增加耦合(测试生产程序集中的代码,关于测试代码中生产程序集的内部知识),但另一方面,它可能有助于创建细粒度的测试而不会混乱公共接口.

您在测试时使用好友声明的经验是什么?它是你的银色子弹,还是它开始了死亡三月?

.net language-agnostic unit-testing internalsvisibleto friend

17
推荐指数
2
解决办法
3267
查看次数

什么时候应该使用[assembly:InternalsVisibleTo()]?

我知道InternalVisibleTo属性用于使用内部访问修饰符向指定的程序集公开类型和方法.我只使用它来将内部方法暴露给包含一组单元测试的单独程序集.

我正在努力想到应该使用它的另一个场景.该属性是否专门用于辅助单元测试,还是有其他原因?

.net assemblies access-modifiers internalsvisibleto

14
推荐指数
3
解决办法
2718
查看次数

我如何访问asp.net 5中的内部

asp.net 5之前,我想补充"internalsVisibleTo(some.namespace.name)"到AssemblyInfo.cs中 - 但我不再有我的WebAPI项目的AssemblyInfo.cs.

如何将WebAPI项目中的内部暴露给我的unitTest项目?

c# unit-testing internalsvisibleto asp.net-web-api

14
推荐指数
1
解决办法
2984
查看次数

InternalsVisibleTo不适用于托管C++

InternalsVisibleTo不适用于我的托管C++项目,但它适用于我的C#项目.任何帮助,将不胜感激.这是一个简化的布局.

项目A - C#,具有我想从B/C访问的内部属性.
项目B - 托管C++.引用一个.
项目Ç - C#,引用一个.

所有项目都使用相同的密钥签名.使用ILDASM或Reflector查看已编译的程序集,表明它们都已正确签名(当我注释掉内部属性用法时).

在Project A的 AssemblyInfo.cs中,我有以下InternalsVisibleTo;

[assembly: InternalsVisibleTo( "B, " +
   "PublicKey=00240000048000009400000006020000002400005253413100040000010001007" +
   "50098646D1C04C2A041FAAF801521A769535DE9A04CD3B4DEDCCBF73D1A6456BF4FE5881451" +
   "0E84983C72D0460B8BA85C52A9CACDC4A0785A08E247C335884C2049ECFE6B2C5E20A18FE4B" +
   "9BFF009ADA232E980D220B3C9586C9C5EE29C29AEE8853DB7BB90CF5A4C704F5244E1A1085C" +
   "4306008535049A0EBB00FE47E78DCB" )]

[assembly: InternalsVisibleTo( "C, " +
   "PublicKey=00240000048000009400000006020000002400005253413100040000010001007" +
   "50098646D1C04C2A041FAAF801521A769535DE9A04CD3B4DEDCCBF73D1A6456BF4FE5881451" +
   "0E84983C72D0460B8BA85C52A9CACDC4A0785A08E247C335884C2049ECFE6B2C5E20A18FE4B" +
   "9BFF009ADA232E980D220B3C9586C9C5EE29C29AEE8853DB7BB90CF5A4C704F5244E1A1085C" +
   "4306008535049A0EBB00FE47E78DCB" )]
Run Code Online (Sandbox Code Playgroud)

钥匙被'切',所以我知道它们是正确的.

当我尝试编译时,A&C编译正常,但项目B失败了

Error 1 error C3767: 'A::MyClass::MyProperty::get': candidate function(s) not accessible c:\Users\<snip>\CppClass.cpp 201 B
Run Code Online (Sandbox Code Playgroud)

MSDN文档说这适用于C++.我需要做一个bug还是别的什么?

是否有另一种方法可以保护财产,使其只能由我签署的集合使用?我知道我可以保护我的所有组件,但是我可以在这样的粒度级别上进行吗?

编辑

根据MSDN中的注释,我将属性更改为以下内容,但仍然无效.

[assembly: InternalsVisibleTo( "B, " + …
Run Code Online (Sandbox Code Playgroud)

.net c++-cli internalsvisibleto

12
推荐指数
1
解决办法
2721
查看次数

UnityContainer和内部构造函数

我有一个内部构造函数的类,想要从Unity(2.0)解析它.

public class MyClass {
    internal MyClass(IService service) {
    }
}
Run Code Online (Sandbox Code Playgroud)

然后我在做

_container.Resolve<MyClass>();
Run Code Online (Sandbox Code Playgroud)

当我这样做时,我有一个例外

Exception is: InvalidOperationException - The type MyClass cannot be constructed. 
Run Code Online (Sandbox Code Playgroud)

IService已注册,唯一的问题是构造函数是内部的.我真的希望这个类是公开的,但是我希望它只能通过工厂(我实际上在调用它container.Resolve<MyClass>())中创建.

有没有办法让Unity看到内部构造函数?像InternalsVisibleTo或者什么?

c# internalsvisibleto ioc-container unity-container

10
推荐指数
2
解决办法
5482
查看次数

如何通过安全地签署公共令牌密钥来使InternalsVisibleTo属性起作用?

我试图通过使用以下内容向我的单元测试项目公开一些内部:

[assembly: InternalsVisibleTo("MyTest")]
Run Code Online (Sandbox Code Playgroud)

但是我收到了错误:

错误1朋友程序集引用MyTest'无效.强名称签名程序集必须在其InternalsVisibleTo声明中指定公钥..../MyClass.cs ...

当我手动分配PublicTokenKey时:

[assembly: InternalsVisibleTo("MyTest, PublicKeyToken=XxxxxYysakf")]
Run Code Online (Sandbox Code Playgroud)

解决方案构建没有任何错误.

  1. 为什么我需要包含公钥令牌?
  2. 我不确定我是否会通过包含公钥令牌来破坏生产中的某些东西.

那么,为我的Test项目分配公钥的最佳和最安全的方法是什么?

.net c# unit-testing internalsvisibleto visual-studio

9
推荐指数
1
解决办法
2万
查看次数

如何使用Fakes Framework垫片模拟/隔离VS 2012中的内部类?

所以,问题是我的程序集中有一堆内部类,我想要测试的类使用它们.由于访问器已经从VS2012中删除了,我使用起来很好,[InternalsVisibleTo]而且效果很好......除非我试图填充我的内部类,否则它们对于Fakes框架是不可见的.我还应该注意,我正在处理的特定类是一个带静态方法的静态类,我真的不想重构所有东西以使用接口(并使用存根),因为组织中的阻力到了那个级别的重构.

有没有办法让这些内部成员可以在Visual Studio 2012中使用填充程序上下文,而无需依靠接口(字面上)一切?

internalsvisibleto microsoft-fakes visual-studio-2012

9
推荐指数
1
解决办法
6455
查看次数