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

C# 如何从dll项目中的bin文件夹中获取文件夹位置?,c#,dll,C#,Dll,我正在创建一个dll项目。对于一种类型的通信,dll需要基于.txt模板发送电子邮件 文件夹位置的示例: C:\VisualStudioProjects\GeneratorApp\Bin\Debug (Or release) \Documents 用于调用这些.txt文件所在的文件夹(在dll的项目中) 首先,它起作用了,但当通过Web服务从dll调用函数时,该地址不再正确,从而导致FileNotFoundExceptions “文档”文件夹及其所有.txt文件将被复制到输出箱中。(始终复制)

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

文件夹位置的示例:

C:\VisualStudioProjects\GeneratorApp\Bin\Debug (Or release) \Documents
用于调用这些.txt文件所在的文件夹(在dll的项目中)

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

“文档”文件夹及其所有.txt文件将被复制到输出箱中。(始终复制)

我还尝试了以下方法,当然,这些方法会产生其他结果,但对我没有帮助

Assembly.GetExecutingAssembly().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"
假设Assembly.GetEntryAssembly()将返回使用dll的程序集,因为它是条目程序集而不是dll

它在您的测试项目中起作用,因为您的所有exe和DLL都位于一个位置,而这个位置在其他情况下可能适合您的工作环境

试着用它来代替

您确定已在“属性”选项卡上将这些文件标记为
Resource


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

您是否尝试转储或调试以查看其尝试查找模板的地址?在工作环境中,Path.Combine(Assembly.GetEntryAssembly().Location+folderName)返回了什么?@EugenePodskal:请参阅编辑的文章以获取输出。看起来ASP.NET宿主在混淆所有内容方面都做得很好。你检查过这些目录的内容了吗?我真的建议你在web.config中为这些路径创建一个条目。通过这种方式,您可以从程序集位置重建位置的麻烦中解脱出来。是的,我这样做了,除了dll之外,没有文件夹可以保存.txt文件。我将尝试将它们作为资源添加,我会将结果反馈给您
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"