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

本文关键字:新类 类库 访问 添加 | 更新日期: 2023-09-27 17:54:36

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

我已经尝试了以下所有方法:

  1. 清理项目解决方案
  2. 保存并重新构建调试和发布
  3. 关闭项目并重新打开
  4. 我正在尝试引用
  5. 的图书馆项目的第一步到第三步

在我想引用库的项目中,我已经尝试从bin/release折叠中加载。dll,并在obj/release文件夹中加载主库项目。dll。因为我仍然无法访问到我添加到库中的新类,所以更简洁的方法产生了影响。我引用了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);
        }
    }
}

}

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

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

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

这是一个MSDN链接,解释访问修饰符。

1:如果你没有在类前面放一个修饰符,它将默认为internal。
2:除非您将另一个程序集标记为友元程序集

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

,它应该可以工作。
public class EmbeddedResourceUrlService : IEmbeddedResourceRetrieval

EmbeddedResourceUrlService是private类,使用public修饰符

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. 重建所有

和错误不会在那里