2

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

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

  1. 清理项目解决方案
  2. 保存并重建调试和发布
  3. 关闭项目并重新打开
  4. 我想参考的图书馆项目的第一步到第三步

在我想从中引用库的项目中,我尝试从折叠的 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);
        }
    }
}

}

4

3 回答 3

4

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

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

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

1:如果你不在类前面加上修饰符,它将默认为内部。
2:除非你将其他程序集标记为朋友程序集

于 2013-01-19T05:22:56.637 回答
0

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

public class EmbeddedResourceUrlService : IEmbeddedResourceRetrieval
于 2013-01-19T05:23:40.207 回答
0

EmbeddedResourceUrlService类是私有的,使用 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. 全部重建

并且不会出现错误

于 2013-01-19T05:24:44.090 回答