无法访问添加到类库的新类

时间:2013-01-19 05:20:02

标签: c# .net visual-studio-2012

我有一个类库,我添加了另一个类,无论我尝试什么,它都不会在我引用该库的项目中可用。我在这个库中引用和使用的原始类没有问题。

我尝试了以下所有内容:

  1. 清理项目解决方案
  2. 保存并重建调试和发布
  3. 关闭项目并重新开启
  4. 我正在参考的图书馆项目的第一步到第三步
  5. 在我想引用库的项目中,我尝试将bin / release折叠的.dll形式加载到obj / 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);
            }
        }
    }
    

    }

3 个答案:

答案 0 :(得分:4)

将公开放在类定义的前面。如果该类标记为内部 1 ,则只能由同一程序集 2 中的其他类访问。​​

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

以下是解释访问修饰符的MSDN link

1:如果你没有在类的前面放置一个修改器,它将默认为内部。
2:除非你将另一个集合标记为friend assembly

答案 1 :(得分:0)

在我看来,问题就是缺少访问修饰符。默认情况下,c#编译器将类视为内部类。如果您将声明更改为

,它应该有效
public class EmbeddedResourceUrlService : IEmbeddedResourceRetrieval

答案 2 :(得分: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. 清洁解决方案
  2. 从两个项目中删除所有bin文件夹
  3. 重建所有
  4. 并且错误不会出现