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