我正在创建一个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"
答案 0 :(得分:1)
Docs说Assembly.GetEntryAssembly()会返回使用你的dll的程序集,因为它是入口程序集而不是你的dll。
它适用于您的测试项目,因为您的所有exe和dll都在一个位置,这可能是您的工作环境。
尝试改为使用Assembly.GetExecutingAssembly()。
您确定已在“属性”标签上将这些文件标记为Resource
吗?
或者您可以尝试将这些模板作为资源嵌入到您的dll中,如果它们是不会经常更改的静态数据