我有一个类库,我添加了另一个类,无论我尝试什么,它都不会在我引用该库的项目中可用。我在这个库中引用和使用的原始类没有问题。
我尝试了以下所有内容:
在我想引用库的项目中,我尝试将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);
}
}
}
}
答案 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);
}
}
}
}
即使那时班级没有出现(已经过了几次)
并且错误不会出现