2013-01-19 37 views
2

我有一個類庫,我添加了另一個類,無論我嘗試什麼,它都不會在我引用該庫的項目中可用。我對在此庫中引用和使用的原始類沒有任何問題。無法訪問添加到類庫的新類

我已經嘗試了所有的如下:

  1. 通過三個在清潔項目解決方案
  2. 保存和重建兩種調試和發佈
  3. 關閉項目並重新打開
  4. 步驟一個圖書館項目我正在參考

在我想引用該庫的項目我已經嘗試在obj/release文件夾中加載.dll表單的bin/release摺疊以及主庫項目.dll。 Neater有所作爲,因爲我仍然無法到達我添加到圖書館的新課程。我引用來自bin中摺疊版本的DotNetOpenAuth_Library.dll。

如果這有所作爲,我正在使用上週下載的VS 2012 Express for Web。

我添加到我的圖書館有沒有生成錯誤的類是:

namespace DotNetOpenAuth_Library 
{ 
    class EmbeddedResourceUrlService : IEmbeddedResourceRetrieval 
    { 
     private static string pathFormat = "{0}/Resource/GetWebResourceUrl? assemblyName= {1}&typeName={2}&resourceName={3}"; 
     //private static string pathFormat = "{0}/Resource/GetWebResourceUrl"; 

     public Uri GetWebResourceUrl(Type someTypeInResourceAssembly, string  manifestResourceName) 
    { 
     if (manifestResourceName.Contains("http")) 
     { 
      return new Uri(manifestResourceName); 
     } 
     else 
     { 
      var assembly = someTypeInResourceAssembly.Assembly; 

      // HACK 
      string completeUrl = HttpContext.Current.Request.Url.ToString(); 
      string host = completeUrl.Substring(0, 
       completeUrl.IndexOf(HttpContext.Current.Request.Url.AbsolutePath)); 

      var path = string.Format(pathFormat, 
         host, 
         HttpUtility.UrlEncode(assembly.FullName), 
         HttpUtility.UrlEncode(someTypeInResourceAssembly.ToString()), 
         HttpUtility.UrlEncode(manifestResourceName)); 

      return new Uri(path); 
     } 
    } 
} 

}

+0

是這個類應該是內部(缺省類的訪問修飾符)? –

+0

哇我覺得愚蠢....你正確的我遺漏了公共修飾符。謝謝 – Shawn

回答

3

認沽公共類定義的前面。如果班級標記爲內部它只能由同一程序集內的其他班級訪問。

namespace DotNetOpenAuth_Library 
{ 
    public class EmbeddedResourceUrlService : IEmbeddedResourceRetrieval 
    { 
     //(snip) 
    } 
} 

這是一個MSDN link解釋訪問修飾符。

1:如果您沒有在課堂前面加上修飾符,它會默認爲內部。
2:除非您將其他組件friend assembly

0

它看起來對我來說,這個問題就是缺乏一個訪問修飾符。默認情況下,C#編譯器將類視爲內部類。如果你改變了聲明

public class EmbeddedResourceUrlService : IEmbeddedResourceRetrieval 
+0

我認爲它把默認視爲內部。 –

+0

@ScottChamberlain正確,更新了 –

0

EmbeddedResourceUrlService是私人它應該工作,使用公共修飾符

namespace DotNetOpenAuth_Library 
{ 
    // make class public 
    public class EmbeddedResourceUrlService : IEmbeddedResourceRetrieval 
    { 
     private static string pathFormat = "{0}/Resource/GetWebResourceUrl? assemblyName= {1}&typeName={2}&resourceName={3}"; 
     //private static string pathFormat = "{0}/Resource/GetWebResourceUrl"; 

     public Uri GetWebResourceUrl(Type someTypeInResourceAssembly, string  manifestResourceName) 
    { 
     if (manifestResourceName.Contains("http")) 
     { 
      return new Uri(manifestResourceName); 
     } 
     else 
     { 
      var assembly = someTypeInResourceAssembly.Assembly; 

      // HACK 
      string completeUrl = HttpContext.Current.Request.Url.ToString(); 
      string host = completeUrl.Substring(0, 
       completeUrl.IndexOf(HttpContext.Current.Request.Url.AbsolutePath)); 

      var path = string.Format(pathFormat, 
         host, 
         HttpUtility.UrlEncode(assembly.FullName), 
         HttpUtility.UrlEncode(someTypeInResourceAssembly.ToString()), 
         HttpUtility.UrlEncode(manifestResourceName)); 

      return new Uri(path); 
     } 
    } 
} 

}

即使再類沒有顯示出來(有發生在一段時間)

  1. clean解決方案
  2. 從兩個項目
  3. 重建全部刪除bin文件夾中的所有

和錯誤不會在那裏

+0

&Gary.S ....你當然都是正確的,但斯科特首先進來。無論如何感謝您的幫助! – Shawn