我有一个正在读取一些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路径的方法。
答案 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 - 这可能在将来证明是有用的。