我现在脑子里放了个屁。我有一组由 .NET 网站中的类库读取的文件。问题是文件在三个不同的站点中使用(所有站点都引用类库),所以我不想在所有三个站点中复制文件。我想要做的是在类库本身中有一个文件夹作为共享资源,如下所示:
ClassLib
\Templates
-file1.xml
-file2.pdf
-MyClass.cs
并让 MyClass 从 Templates 目录中读取文件。很简单,除了 MyClass.cs 是从页面调用的,我们称之为 Default.aspx。现在 MyClass.cs 具有如下代码:
IList<string> files = GetTemplateFiles(); // returns the path to the template files e.g. Templates/file1.xml
foreach (string file in files) {
if (File.Exists(file)) {
// do things here...
}
}
File.Exists 总是错误的,似乎是因为它正在查看默认目录而不是 ClassLib 的路径(类似于C:\Projects\Shared\MyLib\
)。现在,我不能使用AppDomain.CurrentDomain.BaseDirectory
,因为这取决于调用它的网站;模板应始终从类库的 Templates 目录中可用,而不是调用应用程序。中的属性Assembly.GetExecutingAssembly()
似乎也没有太大帮助,指向 ASP.NET 临时文件。
基本上我的问题是处理这个问题的最佳方法是什么。模板文件应该是每个应用程序都可以使用的共享资源(而不是复制/粘贴到每个应用程序的三个 Templates/ 目录中),但我不知道哪个应用程序会在给定时间调用它,所以我需要避免硬-将文件路径编码到模板文件夹。我在尝试检索模板文件时遗漏了一些小但至关重要的东西,但我无法弄清楚到底是什么。