首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >反射以避免System.Web引用

反射以避免System.Web引用
EN

Stack Overflow用户
提问于 2011-09-22 10:27:37
回答 2查看 208关注 0票数 1

我有一个共享的报告dll,在窗口和web中都使用。我现在正试图将windows程序移动到.NET 4客户端配置文件,因此需要避免使用System.Web引用。

在某些时候,代码需要获得网站的目录或dll的目录。我用了这样的代码:

代码语言:javascript
复制
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.So,如果我想要更改样式,我只需在dll中更改它,它将应用于所有报表。当时只是将适当的repss文件放到windows和网站上的根目录中。为他们找到合适的道路。

尝试将相对路径与dll一起使用会导致问题。传递report.\mystylesheet.repss在Windows中运行良好,但是尝试~/mystylSheet.repss .\mystylesheet.repss或我可以从web中的dll中想到的其他任何东西,最终都会在错误的目录“c:\windows\system32 32\inetsrv”中查找。

我可以将设置移动到每个不同的窗口和web应用程序,并将其与完整的路径传递进来,这样做似乎是向后的,当它实际上是dll的内部设置时。

希望这一切都有意义。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-09-22 11:02:12

为什么不使用相对于AppDomain.BaseDirectory的路径。

这将是ASP.NET的web应用程序的根目录,以及包含控制台或WinForms应用程序的可执行文件的目录。

对于其他应用程序类型,它通常是一个合理的默认位置:例如,在VSTO 2005应用程序中,它将是包含应用程序的VSTO托管程序集的目录,而不是Excel可执行文件的路径。

如果适当的话,您可以支持一个可选的配置设置(例如,appSetting),允许调用DLL的人指定备用位置,同时默认到基本目录。

另一个选项是允许调用方指定样式表文件的路径,该路径可以是绝对的,也可以是相对的。如果是相对的,则使其相对于AppDomain.BaseDirectory

代码语言:javascript
复制
if (!Path.IsPathRooted(stylesheetPath))
{
     stylesheetPath = Path.Combine(
                          AppDomain.CurrentDomain.BaseDirectory, 
                          stylesheetPath);
}
...

请注意,如果使用相对路径,则它将相对于当前工作目录,该目录在应用程序的生存期内可能会更改,并且与应用程序基目录不相同。

票数 2
EN

Stack Overflow用户

发布于 2011-09-22 10:31:32

如果确定位置的机制应取决于上下文,则调用方将其作为构造函数或方法参数或类似的东西传递似乎是合适的。无论是直线路径还是类似于Func<string, string>的“路径解析器”,都将取决于您需要做什么。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7513304

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档