2012-03-16 79 views
2

我有以下代码:问题InternalsVisibleTo属性

namespace ConectorV2 
{ 
    [assembly:InternalsVisibleTo("Pruebas")] 
    internal static class Utilidades 
    { 
     internal static string extraerCadenaDeConexion() 
     { 
      return extraerCadenaDeConexion(new XElement()); 
     } 
     internal static string extraerCadenaDeConexion(XElement documento) 
     { 
      throw new NotImplementedException(); 
     } 
    } 
} 

然后在Pruebas项目:

namespace Pruebas.ConectorV2.Cliente 
{ 
    [TestFixture] 
    class ModuloExtraerCadenaDeConexion 
    { 
     [Test] 
     public void devuelveCadenaSolicitada() 
     { 
      var mock = new MockRepository(); 
      var appSettings = 
       XElement.Parse(
        @"<appSettings> 
           <setting key='dbtype' value='SQLSERVER' /> 
           <setting key='SQLSERVER' value='prueba' /> 
          </appSettings>"); 
      Assert.That(ConectorV2.Utilidades.extraerCadenaDeConexion(appSettings), Is.EqualTo("prueba")); 
     } 
    } 
} 

我得到编译如下错误:

类型或命名空间名称'Utilidades'不存在于命名空间Pruebas.ConectorV2'中(您是否缺少程序集引用?)

该程序集在我的pruebas项目中被正确引用,并且我在msdn上读到项目的默认程序集名称是项目名称...我错过了什么?

+0

你申请过强名称签名的程序集的一个或两个? – 2012-03-16 13:10:42

+0

不,虽然我的印象我不需要 – 2012-03-16 13:16:51

+0

好,所以我签署了两个组件,现在它说'Conector.Utilidades'由于其保护级别而无法访问 – 2012-03-16 14:24:48

回答

5

您不应该在类上使用汇编级属性!只是这样做:

[assembly:InternalsVisibleTo("Pruebas")] 
namespace ConectorV2 
{ 
    internal static class Utilidades 
    { /* ... */ 

它应该工作

+0

是的,我刚刚发现了。有趣的是,双向书的c#深入把该属性放在课堂上。我猜c#dev团队错了,那么= P。 – 2012-03-16 14:32:51

+0

可能是他们没有把类放在名字空间中;如果是的话,那么可以在类 – 2012-03-16 14:38:30

+0

之上放置一个程序集属性啊,好的,谢谢你指出 – 2012-03-16 14:56:49