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

本文关键字:文件夹 获取 位置 bin dll 项目 | 更新日期: 2023-09-27 18:09:25

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

文件夹位置示例:

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

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

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

首先它工作,但当通过web服务从dll调用函数时,此地址不再是正确的,导致FileNotFoundExceptions

documents文件夹及其所有.txt文件被复制到输出bin中。(总是)副本。

我还尝试了以下方法,当然有其他结果,但不能帮助我。

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"

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

文档说assembly . getentryassembly()将返回使用你的dll的程序集,因为它是入口程序集而不是你的dll。

它在你的测试项目中工作,因为你所有的exe和dll都在一个位置,可以为你的工作环境。

尝试使用Assembly.GetExecutingAssembly()。

您确定已在Properties选项卡上将这些文件标记为Resource吗?

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