Reputation: 13516
I have a project folder called XSL which contains xsl files used for transforming xml. I use the following code to fetch an xsl file:
string html = @"c:\temp\export.html";
XslCompiledTransform transform = new XslCompiledTransform();
Uri uri = new Uri(@"XSL\ToHtml.xsl", UriKind.Relative);
transform.Transform(CurrentXmlFile, html);
System.Diagnostics.Process.Start(html);
This works ok when debugging but when I deploy using clickonce and install it, I get an error - 'Could not find part of the path {my user documents path}\XSL\ToHtml.xsl'. It really needs to be looking in {installation folder}\XSL\ToHtml.xsl.
What must I do to correctly reference this path?
Upvotes: 1
Views: 450
Reputation: 57698
As already stated in DSO's answer, you should not use or implicitly depend of Environment.CurrentDirectory
when you want the directory where your application executable or assemblies are located.
However I would use AppDomain.CurrentDomain.BaseDirectory
instead of relying on the location of the currently executing assembly.
Upvotes: 3
Reputation: 9580
Relative paths are based off the current directory (Environment.CurrentDirectory), which your app has no control over. If you want to base a path off your app's install folder use this:
string file = Path.Combine(
System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location),
@"XSL\ToHtml.xsl");
Upvotes: 0