2012-03-16 82 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