【发布时间】:2011-09-22 10:27:37
【问题描述】:
我有一个在 windows 和 web 中使用的共享报告 dll。我现在正在尝试将 Windows 程序移动到 .NET 4 客户端配置文件,因此需要避免 System.Web 引用。
有些时候代码需要获取网站的目录或者dll的目录。我使用了类似这样的代码:
string path;
if (HttpContext.Current != null)
{
path = HttpContext.Current.Server.MapPath("default.aspx");
}
else
{
path = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
}
有没有办法使用反射或类似方法来避免 System.Web 引用,以便我仍然可以获得适当的路径?如果是,我该怎么做?
还有其他选择吗?
编辑 我想这样做的原因是我使用了一个可以获取样式表文件并将其应用于报告的报告系统(我对所有报告都这样做)。作为我之前在 dll 本身 mystylesheet.repss 中的设置。因此,如果我想更改样式,我只需在 dll 中更改它并将其应用于所有报告。然后,只需将适当的 repss 文件放入 Windows 和网站的根目录中即可。并找到合适的路径。
尝试对 dll 使用相对路径会导致问题。传递报告。\mystylesheet.repss 在 Windows 中工作正常,但尝试 ~/mystylesheet.repss .\mystylesheet.repss 或我能从 web 中的 dll 中想到的任何其他内容最终会在错误的目录中查找“c:\windows\system32 \inetsrv"。
我可以将设置移出到每个不同的窗口和网络应用程序,然后将其传递给计算出的完整路径,当它实际上是 dll 的内部设置时,这样做似乎倒退了。
希望这一切都有意义。
【问题讨论】:
-
将基本路径从客户端代码传递到库中不是更好吗?
-
我可以这样做,但不希望这样做。我只是添加一个编辑来解释我为什么要这样做。
标签: .net reflection system.web