如何从dll项目中的bin文件夹中获取文件夹位置?

时间:2014-06-20 06:58:25

标签: c# dll

我正在创建一个dll项目。对于一种类型的通信,dll需要基于.txt模板发送电子邮件。

文件夹位置示例:

C:\VisualStudioProjects\GeneratorApp\Bin\Debug (Or release) \Documents

用于调用我使用的这些.txt文件所在的文件夹(在dll的项目中)

var folderName = "Documents";
Path.Combine(Assembly.GetEntryAssembly().Location + folderName);

首先它起作用,但是当通过网络服务从dll调用该函数时,该地址不再正确,导致 FileNotFoundExceptions

将文档文件夹及其所有.txt文件复制到出纸槽。 (总是复制)。

我也尝试了以下方法,这些方法当然会给出其他结果,但无法帮助我。

Assembly.GetExecutingAssembly().Location

var dm = typeof(AppDomainManager);
dm.Assembly.Location;

有关如何解决这个问题的任何想法?

编辑:

我收到的各种输出:

GetEntryAssembly = null => no location to grab
GetExecutingAssembly Location = "C:\\Windows\\Microsoft.NET\\Framework\\v4.0.30319\\Temporary ASP.NET Files\\#####\\d37e9080\\ff60155b\\assembly\\dl3\\24596b30\\c542f015_588ccf01\\GeneratorApp.dll"
AppDomainManager Location = "C:\\Windows\\Microsoft.NET\\Framework\\v4.0.30319\\mscorlib.dll"

1 个答案:

答案 0 :(得分:1)

Docs说Assembly.GetEntryAssembly()会返回使用你的dll的程序集,因为它是入口程序集而不是你的dll。

它适用于您的测试项目,因为您的所有exe和dll都在一个位置,这可能是您的工作环境。

尝试改为使用Assembly.GetExecutingAssembly()

您确定已在“属性”标签上将这些文件标记为Resource吗?

或者您可以尝试将这些模板作为资源嵌入到您的dll中,如果它们是不会经常更改的静态数据