Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用InternalsVisibleToAttribute进行单元测试需要使用/out进行编译:filename.ext?_C#_Vb.net_Unit Testing_.net 2.0_Internals - Fatal编程技术网

C# 使用InternalsVisibleToAttribute进行单元测试需要使用/out进行编译:filename.ext?

C# 使用InternalsVisibleToAttribute进行单元测试需要使用/out进行编译:filename.ext?,c#,vb.net,unit-testing,.net-2.0,internals,C#,Vb.net,Unit Testing,.net 2.0,Internals,在我最近的一个问题中,我问的是关于内部可视属性的问题 我已经阅读了关于如何使用它的文档,一切都很好,并且都能理解。然而,我不能从我的测试项目中实例化我的类Groupe 我希望能够从测试程序集中实例化包装程序集中的内部类 感谢您的帮助 编辑#1 下面是我在尝试实例化我的类型时遇到的编译时错误: Erreur 2'Carra.examples.Blocs.ActiveDirectory.grope'n'est pas accessible dans ce contexte,car il est'Pr

在我最近的一个问题中,我问的是关于内部可视属性的问题

我已经阅读了关于如何使用它的文档,一切都很好,并且都能理解。然而,我不能从我的测试项目中实例化我的类Groupe

我希望能够从测试程序集中实例化包装程序集中的内部类

感谢您的帮助

编辑#1

下面是我在尝试实例化我的类型时遇到的编译时错误:

Erreur 2'Carra.examples.Blocs.ActiveDirectory.grope'n'est pas accessible dans ce contexte,car il est'Private'。C:\Open\Projects\examples\Src\Carra.examples.Blocs.ActiveDirectory\Carra.examples.Blocs.ActiveDirectory.Tests\GroupeTests.vb 9 18 Carra.examples.Blocs.ActiveDirectory.Tests

(这说明我的类型在此上下文中是不可访问的,因为它是私有的。)但它是Friend(内部的)

编辑#2

下面是一段建议用于实现公共接口IGroupe的Groupe类的代码:

#Region "Importations"
Imports System.DirectoryServices
Imports System.Runtime.CompilerServices
#End Region

<Assembly: InternalsVisibleTo("Carra.Exemples.Blocs.ActiveDirectory.Tests")> 

Friend Class Groupe
    Implements IGroupe

#Region "Membres privés"
    Private _classe As String = "group"
    Private _domaine As String
    Private _membres As CustomSet(Of IUtilisateur)
    Private _groupeNatif As DirectoryEntry
#End Region

#Region "Constructeurs"
    Friend Sub New()
        _membres = New CustomSet(Of IUtilisateur)()
        _groupeNatif = New DirectoryEntry()
    End Sub

    Friend Sub New(ByVal domaine As String)
        If (String.IsNullOrEmpty(domaine)) Then Throw New ArgumentNullException()
        _domaine = domaine
        _membres = New CustomSet(Of IUtilisateur)()
        _groupeNatif = New DirectoryEntry(domaine)
    End Sub

    Friend Sub New(ByVal groupeNatif As DirectoryEntry)
        _groupeNatif = groupeNatif
        _domaine = _groupeNatif.Path
        _membres = New CustomSet(Of IUtilisateur)()
    End Sub
#End Region
#地区“进口”
导入System.DirectoryServices
导入System.Runtime.CompilerServices
#末端区域
友类群
实现iGroup
#“私人成员”地区
Private\u classe As String=“group”
私有域作为字符串
私有成员作为定制集(IUtilisateur的)
Private\u groupeNatif作为DirectoryEntry
#末端区域
#区域“建设者”
新朋友
_membres=新的(IUtilisateur的)客户集()
_groupeNatif=新目录条目()
端接头
Friend Sub New(ByVal domaine作为字符串)
如果是(String.IsNullOrEmpty(domaine)),则抛出新的ArgumentNullException()
_庄园
_membres=新的(IUtilisateur的)客户集()
_groupeNatif=新目录条目(域)
端接头
Friend Sub New(ByVal groupeNatif作为DirectoryEntry)
_groupeNatif=groupeNatif
_域=_groupeNatif.Path
_membres=新的(IUtilisateur的)客户集()
端接头
#末端区域
以及试图使用它的代码:

#Region "Importations"
Imports NUnit.Framework

Imports Carra.Exemples.Blocs.ActiveDirectory
#End Region

<TestFixture()> _
Public Class GroupeTests
    <Test()> _
    Public Sub CreerDefaut()
        Dim g As Groupe = New Groupe()
        Assert.IsNotNull(g)
        Assert.IsInstanceOf(Groupe, g)
    End Sub
End Class
#地区“进口”
导入NUnit.Framework
导入Carra.examples.Blocs.ActiveDirectory
#末端区域
_
公共类分组测试
_
公共次级信托基金()
尺寸g作为组E=新组E()
Assert.IsNotNull(g)
Assert.IsInstanceOf(组E,g)
端接头
末级
编辑#3

该死!我刚刚注意到我没有在导入区域导入程序集

没有,没有解决任何问题=(


谢谢!

它应该已经可以工作了。InternalsVisibleTo使程序集的所有内部成员可见,包括内部类型

当您尝试从测试项目实例化类时会发生什么

编辑:构造函数本身是朋友/内部的吗?您不仅需要访问类型,还需要访问构造函数。诚然,编译器错误似乎不是这个问题,但我不确定

其他需要检查的事项:

  • InternalsVisibleTo
    是否为您在这对程序集中的其他内部成员工作?可能是因为您没有正确应用
    InternalsVisibleTo
  • Groupe
    是私有类型中的嵌套类型吗?这可以解释问题

如果这些都没有帮助,那么如果您可以发布一个非常简短但完整的失败示例就好了—只需在一个程序集中键入一个好友(以及InternalsVisibleTo属性)和另一段尝试使用它的代码。

您的测试程序集名为
Carra.examples.Blocs.ActiveDirectory.Tests


您已经导入了
Carra.examples.Blocs.ActiveDirectory.Tests
,但您肯定应该只导入
Carra.examples.Blocs.ActiveDirectory
?您的类调用的程序集是什么?看起来有点可疑。

在研究和研究之后,仍然在研究和猜测什么?再次研究在中,我发现了一个链接,其中说“InternalsVisibleTo”不适用于VB.NET,但该属性在.NET 2.0中可用。下面是有问题的链接:

备注说明:

在.NET Framework 2.0版中,Visual Basic不支持使用此属性


所以它不可用,仅此而已!=)

无错误。我的类型无法在IntelliSense中实例化。您的测试项目是否引用包含要实例化的类型的项目?即使没有internalsVisibleTo,您也应该在intellisense中看到这些类型,如果您尝试使用它们,我认为会出现一个错误。是的,它在同一个解决方案中,并在“添加引用”对话框中作为项目引用。如果您键入类的名称并尝试编译,会出现什么错误?我发布的错误:Erreur 2[…].我发布了当我尝试实例化我的类型时遇到的编译错误。我要对程序集签名吗?(我希望避免…)威尔:这两个大会中有谁签字了?如果他们中的任何一个都是,他们两个都必须是。还有其他想法吗?我迷路了,我不知道在哪里搜索,因为这是我第一次使用InternalsVisibleToAttribute。谢谢!=)@威尔:正如山姆所问的,大会的名字肯定正确吗?请注意,程序集名称和命名空间可以完全不同。您的测试程序集有哪些文件?是的。很好的一点,就像在VBNET中一样,名称空间没有写在类文件中,这是我不喜欢的。我本来会这么想的,但它似乎没有改变任何东西=(威尔,那些导入看起来不正确。我已经更新了我的答案。谢谢你的评论,山姆!这是一个错误的复制和粘贴,因为导入在我的原始代码中声明了正确的程序集。我已经阅读了关于在命令行中使用/out:filen编译的内容