无法访问添加到类库中的新类
本文关键字:新类 类库 访问 添加 | 更新日期: 2023-09-27 17:54:36
我有一个类库,我添加了另一个类,无论我尝试什么,它都不会在我引用库的项目中可用。我对我在这个库中创建的原始类的引用和使用没有问题。
我已经尝试了以下所有方法:
- 清理项目解决方案
- 保存并重新构建调试和发布
- 关闭项目并重新打开
- 我正在尝试引用 的图书馆项目的第一步到第三步
在我想引用库的项目中,我已经尝试从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);
}
}
}
}
即使类没有出现(已经发生了几次)
- 清洁解决方案
- 从两个项目中删除所有bin文件夹
- 重建所有
和错误不会在那里