从Web应用程序调用时如何获取类库的路径?

时间:2011-05-18 09:14:46

标签: c# asp.net .net

我有一个正在读取一些XSLT文件的类库。我正在使用资源,但它们是在dll中预编译的,我们希望能够动态更改这些文件,因此我被要求从文件系统中读取它们。

我开始使用相对路径并且单元测试运行正常,但是集成测试失败了,因为在这种情况下,它们正在运行Web应用程序并且使用错误的路径。

代码非常简单,它只是加载xslt:

string xslFilePath = @"xslts\transformation1.xsl";
XslCompiledTransform transformation = new XslCompiledTransform();
transformation.Load(xslFilePath, new XsltSettings(true, true), new XmlUrlResolver());

集成测试中的错误是:

  

DirectoryNotFoundException ExceptionMessage - 找不到路径'C:\ Program Files \ Common Files \ Microsoft Shared \ DevServer \ 10.0 \ xslts \ transformation1.xsl'的一部分。

我到目前为止找到的最近的解决方案是:

string codeBase = Assembly.GetAssembly(typeof(Class1)).CodeBase;
UriBuilder uri = new UriBuilder(codeBase);
string fullPath = Uri.UnescapeDataString(uri.Path);
string theDirectory = Path.GetDirectoryName(fullPath);
string relativePath = @"\xslts\transformation1.xsl";
string path = theDirectory + relativePath;

但它正在检索错误的路径,这次它是使用该dll的Web应用程序的路径。我仍在尝试寻找解决方案,它必须是一种获取dll路径的方法。

1 个答案:

答案 0 :(得分:0)

假设您正在进行的工作是在ASP .NET过程中,您可以使用:

Server.MapPath("\xslts\transformation1.xsl")

这将为您提供文件的物理路径,即

  

C:\的Inetpub \ wwwroot的\ mysite的\ XSLT文件\ transformation1.xsl

可在此处找到更多信息:

http://msdn.microsoft.com/en-us/library/system.web.httpserverutility.mappath(v=VS.90).aspx

在这里:

http://www.4guysfromrolla.com/webtech/121799-1.shtml

修改

替代方案在你的web.config中添加了一个“PathToXsl”appset - 这可能在将来证明是有用的。